xref: /petsc/include/petscvec.h (revision 1aae288148f733e35813b52db36902e3bdce5a5a)
12eac72dbSBarry Smith /*
237f753daSBarry Smith     Defines the vector component of PETSc. Vectors generally represent
337f753daSBarry Smith   degrees of freedom for finite element/finite difference functions
484cb2905SBarry Smith   on a grid. They have more mathematical structure then simple arrays.
52eac72dbSBarry Smith */
62eac72dbSBarry Smith 
70a835dfdSSatish Balay #ifndef __PETSCVEC_H
80a835dfdSSatish Balay #define __PETSCVEC_H
90a835dfdSSatish Balay #include "petscis.h"
105f5f199fSBarry Smith 
11e9fa29b7SSatish Balay PETSC_EXTERN_CXX_BEGIN
122eac72dbSBarry Smith 
1309321671SBarry Smith /*S
1409321671SBarry Smith      Vec - Abstract PETSc vector object
1509321671SBarry Smith 
1609321671SBarry Smith    Level: beginner
1709321671SBarry Smith 
1809321671SBarry Smith   Concepts: field variables, unknowns, arrays
1909321671SBarry Smith 
2009321671SBarry Smith .seealso:  VecCreate(), VecType, VecSetType()
2109321671SBarry Smith S*/
22f09e8eb9SSatish Balay typedef struct _p_Vec*         Vec;
2309321671SBarry Smith 
2409321671SBarry Smith /*S
2509321671SBarry Smith      VecScatter - Object used to manage communication of data
2609321671SBarry Smith        between vectors in parallel. Manages both scatters and gathers
2709321671SBarry Smith 
2809321671SBarry Smith    Level: beginner
2909321671SBarry Smith 
3009321671SBarry Smith   Concepts: scatter
3109321671SBarry Smith 
3209321671SBarry Smith .seealso:  VecScatterCreate(), VecScatterBegin(), VecScatterEnd()
3309321671SBarry Smith S*/
34f09e8eb9SSatish Balay typedef struct _p_VecScatter*  VecScatter;
3509321671SBarry Smith 
3609321671SBarry Smith /*E
37398c84b2SBarry Smith   ScatterMode - Determines the direction of a scatter
38398c84b2SBarry Smith 
39398c84b2SBarry Smith   Level: beginner
40398c84b2SBarry Smith 
41398c84b2SBarry Smith .seealso: VecScatter, VecScatterBegin(), VecScatterEnd()
42398c84b2SBarry Smith E*/
43398c84b2SBarry Smith typedef enum {SCATTER_FORWARD=0, SCATTER_REVERSE=1, SCATTER_FORWARD_LOCAL=2, SCATTER_REVERSE_LOCAL=3, SCATTER_LOCAL=2} ScatterMode;
44398c84b2SBarry Smith 
45398c84b2SBarry Smith /*MC
46398c84b2SBarry Smith     SCATTER_FORWARD - Scatters the values as dictated by the VecScatterCreate() call
47398c84b2SBarry Smith 
48398c84b2SBarry Smith     Level: beginner
49398c84b2SBarry Smith 
50398c84b2SBarry Smith .seealso: VecScatter, ScatterMode, VecScatterCreate(), VecScatterBegin(), VecScatterEnd(), SCATTER_REVERSE, SCATTER_FORWARD_LOCAL,
51398c84b2SBarry Smith           SCATTER_REVERSE_LOCAL
52398c84b2SBarry Smith 
53398c84b2SBarry Smith M*/
54398c84b2SBarry Smith 
55398c84b2SBarry Smith /*MC
56398c84b2SBarry Smith     SCATTER_REVERSE - Moves the values in the opposite direction then the directions indicated in
57398c84b2SBarry Smith          in the VecScatterCreate()
58398c84b2SBarry Smith 
59398c84b2SBarry Smith     Level: beginner
60398c84b2SBarry Smith 
61398c84b2SBarry Smith .seealso: VecScatter, ScatterMode, VecScatterCreate(), VecScatterBegin(), VecScatterEnd(), SCATTER_FORWARD, SCATTER_FORWARD_LOCAL,
62398c84b2SBarry Smith           SCATTER_REVERSE_LOCAL
63398c84b2SBarry Smith 
64398c84b2SBarry Smith M*/
65398c84b2SBarry Smith 
66398c84b2SBarry Smith /*MC
67398c84b2SBarry Smith     SCATTER_FORWARD_LOCAL - Scatters the values as dictated by the VecScatterCreate() call except NO parallel communication
68398c84b2SBarry Smith        is done. Any variables that have be moved between processes are ignored
69398c84b2SBarry Smith 
70398c84b2SBarry Smith     Level: developer
71398c84b2SBarry Smith 
72398c84b2SBarry Smith .seealso: VecScatter, ScatterMode, VecScatterCreate(), VecScatterBegin(), VecScatterEnd(), SCATTER_REVERSE, SCATTER_FORWARD,
73398c84b2SBarry Smith           SCATTER_REVERSE_LOCAL
74398c84b2SBarry Smith 
75398c84b2SBarry Smith M*/
76398c84b2SBarry Smith 
77398c84b2SBarry Smith /*MC
78398c84b2SBarry Smith     SCATTER_REVERSE_LOCAL - Moves the values in the opposite direction then the directions indicated in
79398c84b2SBarry Smith          in the VecScatterCreate()  except NO parallel communication
80398c84b2SBarry Smith        is done. Any variables that have be moved between processes are ignored
81398c84b2SBarry Smith 
82398c84b2SBarry Smith     Level: developer
83398c84b2SBarry Smith 
84398c84b2SBarry Smith .seealso: VecScatter, ScatterMode, VecScatterCreate(), VecScatterBegin(), VecScatterEnd(), SCATTER_FORWARD, SCATTER_FORWARD_LOCAL,
85398c84b2SBarry Smith           SCATTER_REVERSE
86398c84b2SBarry Smith 
87398c84b2SBarry Smith M*/
88398c84b2SBarry Smith 
89398c84b2SBarry Smith /*E
9009321671SBarry Smith     VecType - String with the name of a PETSc vector or the creation function
9109321671SBarry Smith        with an optional dynamic library name, for example
9209321671SBarry Smith        http://www.mcs.anl.gov/petsc/lib.a:myveccreate()
9309321671SBarry Smith 
9409321671SBarry Smith    Level: beginner
9509321671SBarry Smith 
9609321671SBarry Smith .seealso: VecSetType(), Vec
9709321671SBarry Smith E*/
98a313700dSBarry Smith #define VecType char*
990676abe4SMatthew Knepley #define VECSEQ         "seq"
1000676abe4SMatthew Knepley #define VECMPI         "mpi"
101f48c50deSBarry Smith #define VECSTANDARD    "standard"   /* seq on one process and mpi on several */
1020676abe4SMatthew Knepley #define VECSHARED      "shared"
103765467adSMatthew Knepley #define VECSIEVE       "sieve"
10488b60a73SVictor Minden #define VECSEQCUDA     "seqcuda"
1052c1af831SVictor Minden #define VECMPICUDA     "mpicuda"
106f48c50deSBarry Smith #define VECCUDA        "cuda"       /* seqcuda on one process and mpicuda on several */
10745b63f25SDmitry Karpeev #define VECDD          "vecdd"
108*1aae2881SJed Brown #define VECNEST        "nest"
10945b63f25SDmitry Karpeev 
1102eac72dbSBarry Smith 
111fd487807SMatthew Knepley /* Logging support */
1120700a824SBarry Smith #define    VEC_FILE_CLASSID 1211214
1130700a824SBarry Smith extern PETSCVEC_DLLEXPORT PetscClassId VEC_CLASSID;
1140700a824SBarry Smith extern PETSCVEC_DLLEXPORT PetscClassId VEC_SCATTER_CLASSID;
1158ba1e511SMatthew Knepley 
11645b63f25SDmitry Karpeev 
117e5bd5246SBarry Smith EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecInitializePackage(const char[]);
1188a9890e4SLisandro Dalcin EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecFinalizePackage(void);
119fd487807SMatthew Knepley 
1200c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecCreate(MPI_Comm,Vec*);
121045ff3e0SBarry Smith PetscPolymorphicSubroutine(VecCreate,(Vec *x),(PETSC_COMM_SELF,x))
1220c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecCreateSeq(MPI_Comm,PetscInt,Vec*);
123045ff3e0SBarry Smith PetscPolymorphicSubroutine(VecCreateSeq,(PetscInt n,Vec *x),(PETSC_COMM_SELF,n,x))
1240c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecCreateMPI(MPI_Comm,PetscInt,PetscInt,Vec*);
125045ff3e0SBarry Smith PetscPolymorphicSubroutine(VecCreateMPI,(PetscInt n,PetscInt N,Vec *x),(PETSC_COMM_WORLD,n,N,x))
1260c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecCreateSeqWithArray(MPI_Comm,PetscInt,const PetscScalar[],Vec*);
127045ff3e0SBarry Smith PetscPolymorphicSubroutine(VecCreateSeqWithArray,(PetscInt n,PetscScalar s[],Vec *x),(PETSC_COMM_SELF,n,s,x))
1280c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecCreateMPIWithArray(MPI_Comm,PetscInt,PetscInt,const PetscScalar[],Vec*);
129045ff3e0SBarry Smith PetscPolymorphicSubroutine(VecCreateMPIWithArray,(PetscInt n,PetscInt N,PetscScalar s[],Vec *x),(PETSC_COMM_WORLD,n,N,s,x))
1300c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecCreateShared(MPI_Comm,PetscInt,PetscInt,Vec*);
1310c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSetFromOptions(Vec);
132f69a0ea3SMatthew Knepley EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSetUp(Vec);
1330c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecDestroy(Vec);
134f1e08e49SBarry Smith EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecZeroEntries(Vec);
135f69a0ea3SMatthew Knepley EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSetOptionsPrefix(Vec,const char[]);
136f69a0ea3SMatthew Knepley EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecAppendOptionsPrefix(Vec,const char[]);
137f69a0ea3SMatthew Knepley EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGetOptionsPrefix(Vec,const char*[]);
138f69a0ea3SMatthew Knepley 
1390c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSetSizes(Vec,PetscInt,PetscInt);
140fd487807SMatthew Knepley 
1413c5daeb9SBarry Smith EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecDotNorm2(Vec,Vec,PetscScalar*,PetscScalar*);
1420c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecDot(Vec,Vec,PetscScalar*);
143fcd5dd21SSatish Balay PetscPolymorphicFunction(VecDot,(Vec x,Vec y),(x,y,&s),PetscScalar,s)
1440c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecTDot(Vec,Vec,PetscScalar*);
145fcd5dd21SSatish Balay PetscPolymorphicFunction(VecTDot,(Vec x,Vec y),(x,y,&s),PetscScalar,s)
146bb9195b6SBarry Smith EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecMDot(Vec,PetscInt,const Vec[],PetscScalar[]);
147bb9195b6SBarry Smith EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecMTDot(Vec,PetscInt,const Vec[],PetscScalar[]);
148cddf8d76SBarry Smith 
14909321671SBarry Smith /*E
15009321671SBarry Smith     NormType - determines what type of norm to compute
15109321671SBarry Smith 
15209321671SBarry Smith     Level: beginner
15309321671SBarry Smith 
15409321671SBarry Smith .seealso: VecNorm(), VecNormBegin(), VecNormEnd(), MatNorm()
15509321671SBarry Smith E*/
1569dcbbd2bSBarry Smith typedef enum {NORM_1=0,NORM_2=1,NORM_FROBENIUS=2,NORM_INFINITY=3,NORM_1_AND_2=4} NormType;
1579dcbbd2bSBarry Smith extern const char *NormTypes[];
158cddf8d76SBarry Smith #define NORM_MAX NORM_INFINITY
15909321671SBarry Smith 
1609b250c83SBarry Smith /*MC
1619b250c83SBarry Smith      NORM_1 - the one norm, ||v|| = sum_i | v_i |. ||A|| = max_j || v_*j ||, maximum column sum
1629b250c83SBarry Smith 
1639b250c83SBarry Smith    Level: beginner
1649b250c83SBarry Smith 
1659b250c83SBarry Smith .seealso:  NormType, MatNorm(), VecNorm(), VecNormBegin(), VecNormEnd(), NORM_2, NORM_FROBENIUS,
1669b250c83SBarry Smith            NORM_INFINITY, NORM_1_AND_2
1679b250c83SBarry Smith 
1689b250c83SBarry Smith M*/
1699b250c83SBarry Smith 
1709b250c83SBarry Smith /*MC
1719b250c83SBarry Smith      NORM_2 - the two norm, ||v|| = sqrt(sum_i (v_i)^2) (vectors only)
1729b250c83SBarry Smith 
1739b250c83SBarry Smith    Level: beginner
1749b250c83SBarry Smith 
1759b250c83SBarry Smith .seealso:  NormType, MatNorm(), VecNorm(), VecNormBegin(), VecNormEnd(), NORM_1, NORM_FROBENIUS,
1769b250c83SBarry Smith            NORM_INFINITY, NORM_1_AND_2
1779b250c83SBarry Smith 
1789b250c83SBarry Smith M*/
1799b250c83SBarry Smith 
1809b250c83SBarry Smith /*MC
1819b250c83SBarry Smith      NORM_FROBENIUS - ||A|| = sqrt(sum_ij (A_ij)^2), same as NORM_2 for vectors
1829b250c83SBarry Smith 
1839b250c83SBarry Smith    Level: beginner
1849b250c83SBarry Smith 
1859b250c83SBarry Smith .seealso:  NormType, MatNorm(), VecNorm(), VecNormBegin(), VecNormEnd(), NORM_1, NORM_2,
1869b250c83SBarry Smith            NORM_INFINITY, NORM_1_AND_2
1879b250c83SBarry Smith 
1889b250c83SBarry Smith M*/
1899b250c83SBarry Smith 
1909b250c83SBarry Smith /*MC
1919b250c83SBarry Smith      NORM_INFINITY - ||v|| = max_i |v_i|. ||A|| = max_i || v_i* ||, maximum row sum
1929b250c83SBarry Smith 
1939b250c83SBarry Smith    Level: beginner
1949b250c83SBarry Smith 
1959b250c83SBarry Smith .seealso:  NormType, MatNorm(), VecNorm(), VecNormBegin(), VecNormEnd(), NORM_1, NORM_2,
1969b250c83SBarry Smith            NORM_FROBINIUS, NORM_1_AND_2
1979b250c83SBarry Smith 
1989b250c83SBarry Smith M*/
1999b250c83SBarry Smith 
2009b250c83SBarry Smith /*MC
2019b250c83SBarry Smith      NORM_1_AND_2 - computes both the 1 and 2 norm of a vector
2029b250c83SBarry Smith 
2039b250c83SBarry Smith    Level: beginner
2049b250c83SBarry Smith 
2059b250c83SBarry Smith .seealso:  NormType, MatNorm(), VecNorm(), VecNormBegin(), VecNormEnd(), NORM_1, NORM_2,
2069b250c83SBarry Smith            NORM_FROBINIUS, NORM_INFINITY
2079b250c83SBarry Smith 
2089b250c83SBarry Smith M*/
2099b250c83SBarry Smith 
2109b250c83SBarry Smith /*MC
2119b250c83SBarry Smith      NORM_MAX - see NORM_INFINITY
2129b250c83SBarry Smith 
213d41222bbSBarry Smith    Level: beginner
214d41222bbSBarry Smith 
2159b250c83SBarry Smith M*/
2169b250c83SBarry Smith 
2170c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecNorm(Vec,NormType,PetscReal *);
218ace3abfcSBarry Smith EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecNormAvailable(Vec,NormType,PetscBool *,PetscReal *);
219045ff3e0SBarry Smith PetscPolymorphicSubroutine(VecNorm,(Vec x,PetscReal *r),(x,NORM_2,r))
220c714d2d0SBarry Smith PetscPolymorphicFunction(VecNorm,(Vec x,NormType t),(x,t,&r),PetscReal,r)
221c714d2d0SBarry Smith PetscPolymorphicFunction(VecNorm,(Vec x),(x,NORM_2,&r),PetscReal,r)
2220c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecNormalize(Vec,PetscReal *);
2230c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSum(Vec,PetscScalar*);
2240c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecMax(Vec,PetscInt*,PetscReal *);
225045ff3e0SBarry Smith PetscPolymorphicSubroutine(VecMax,(Vec x,PetscReal *r),(x,PETSC_NULL,r))
2260c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecMin(Vec,PetscInt*,PetscReal *);
227045ff3e0SBarry Smith PetscPolymorphicSubroutine(VecMin,(Vec x,PetscReal *r),(x,PETSC_NULL,r))
2289a05e725SBarry Smith EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecScale(Vec,PetscScalar);
2290c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecCopy(Vec,Vec);
230abb0e124SMatthew Knepley EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSetRandom(Vec,PetscRandom);
2312dcb1b2aSMatthew Knepley EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSet(Vec,PetscScalar);
2320c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSwap(Vec,Vec);
2332dcb1b2aSMatthew Knepley EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecAXPY(Vec,PetscScalar,Vec);
2342dcb1b2aSMatthew Knepley EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecAXPBY(Vec,PetscScalar,PetscScalar,Vec);
235bb9195b6SBarry Smith EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecMAXPY(Vec,PetscInt,const PetscScalar[],Vec[]);
2362dcb1b2aSMatthew Knepley EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecAYPX(Vec,PetscScalar,Vec);
2372dcb1b2aSMatthew Knepley EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecWAXPY(Vec,PetscScalar,Vec,Vec);
23809192fe3SBarry Smith EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecAXPBYPCZ(Vec,PetscScalar,PetscScalar,PetscScalar,Vec,Vec);
2390c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecPointwiseMax(Vec,Vec,Vec);
2400190745aSSatish Balay PetscPolymorphicSubroutine(VecPointwiseMax,(Vec x,Vec y),(x,y,y))
2410c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecPointwiseMaxAbs(Vec,Vec,Vec);
2420190745aSSatish Balay PetscPolymorphicSubroutine(VecPointwiseMaxAbs,(Vec x,Vec y),(x,y,y))
2430c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecPointwiseMin(Vec,Vec,Vec);
2440190745aSSatish Balay PetscPolymorphicSubroutine(VecPointwiseMin,(Vec x,Vec y),(x,y,y))
2450c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecPointwiseMult(Vec,Vec,Vec);
246b2587007SBarry Smith PetscPolymorphicSubroutine(VecPointwiseMult,(Vec x,Vec y),(x,x,y))
2470c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecPointwiseDivide(Vec,Vec,Vec);
248b2587007SBarry Smith PetscPolymorphicSubroutine(VecPointwiseDivide,(Vec x,Vec y),(x,x,y))
2490c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecMaxPointwiseDivide(Vec,Vec,PetscReal*);
2502dcb1b2aSMatthew Knepley EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecShift(Vec,PetscScalar);
2510c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecReciprocal(Vec);
252ace3abfcSBarry Smith EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecPermute(Vec, IS, PetscBool );
2530e1b073aSBarry Smith EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSqrtAbs(Vec);
25406c1185fSBarry Smith EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecLog(Vec);
25506c1185fSBarry Smith EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecExp(Vec);
2560c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecAbs(Vec);
2570c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecDuplicate(Vec,Vec*);
2580c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecDuplicateVecs(Vec,PetscInt,Vec*[]);
2590c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecDestroyVecs(Vec[],PetscInt);
260bb9195b6SBarry Smith EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecStrideNormAll(Vec,NormType,PetscReal[]);
261bb9195b6SBarry Smith EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecStrideMaxAll(Vec,PetscInt [],PetscReal []);
262bb9195b6SBarry Smith EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecStrideMinAll(Vec,PetscInt [],PetscReal []);
263bb9195b6SBarry Smith EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecStrideScaleAll(Vec,PetscScalar[]);
2644a560884SBarry Smith 
2650c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecStrideNorm(Vec,PetscInt,NormType,PetscReal*);
266fcd5dd21SSatish Balay PetscPolymorphicFunction(VecStrideNorm,(Vec x,PetscInt i),(x,i,NORM_2,&r),PetscReal,r)
267fcd5dd21SSatish Balay PetscPolymorphicFunction(VecStrideNorm,(Vec x,PetscInt i,NormType t),(x,i,t,&r),PetscReal,r)
2680c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecStrideMax(Vec,PetscInt,PetscInt *,PetscReal *);
269fcd5dd21SSatish Balay PetscPolymorphicFunction(VecStrideMax,(Vec x,PetscInt i),(x,i,PETSC_NULL,&r),PetscReal,r)
2700c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecStrideMin(Vec,PetscInt,PetscInt *,PetscReal *);
271fcd5dd21SSatish Balay PetscPolymorphicFunction(VecStrideMin,(Vec x,PetscInt i),(x,i,PETSC_NULL,&r),PetscReal,r)
272f31393a2Sdalcinl EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecStrideScale(Vec,PetscInt,PetscScalar);
273954b3ec6SBarry Smith 
274954b3ec6SBarry Smith 
2750c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecStrideGather(Vec,PetscInt,Vec,InsertMode);
2760c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecStrideScatter(Vec,PetscInt,Vec,InsertMode);
277bb9195b6SBarry Smith EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecStrideGatherAll(Vec,Vec[],InsertMode);
278bb9195b6SBarry Smith EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecStrideScatterAll(Vec[],Vec,InsertMode);
279d2655a18SBarry Smith 
2800c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSetValues(Vec,PetscInt,const PetscInt[],const PetscScalar[],InsertMode);
2810c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGetValues(Vec,PetscInt,const PetscInt[],PetscScalar[]);
2820c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecAssemblyBegin(Vec);
2830c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecAssemblyEnd(Vec);
2840c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecStashSetInitialSize(Vec,PetscInt,PetscInt);
2850c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecStashView(Vec,PetscViewer);
2860c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecStashGetInfo(Vec,PetscInt*,PetscInt*,PetscInt*,PetscInt*);
28762dc5420SSatish Balay 
28830de9b25SBarry Smith /*MC
28930de9b25SBarry Smith    VecSetValue - Set a single entry into a vector.
29030de9b25SBarry Smith 
29130de9b25SBarry Smith    Synopsis:
292d360dc6fSBarry Smith    PetscErrorCode VecSetValue(Vec v,int row,PetscScalar value, InsertMode mode);
29330de9b25SBarry Smith 
29430de9b25SBarry Smith    Not Collective
29530de9b25SBarry Smith 
29630de9b25SBarry Smith    Input Parameters:
29730de9b25SBarry Smith +  v - the vector
29830de9b25SBarry Smith .  row - the row location of the entry
29930de9b25SBarry Smith .  value - the value to insert
30030de9b25SBarry Smith -  mode - either INSERT_VALUES or ADD_VALUES
30130de9b25SBarry Smith 
30230de9b25SBarry Smith    Notes:
30330de9b25SBarry Smith    For efficiency one should use VecSetValues() and set several or
30430de9b25SBarry Smith    many values simultaneously if possible.
30530de9b25SBarry Smith 
3061d73ed98SBarry Smith    These values may be cached, so VecAssemblyBegin() and VecAssemblyEnd()
3071d73ed98SBarry Smith    MUST be called after all calls to VecSetValues() have been completed.
3081d73ed98SBarry Smith 
3091d73ed98SBarry Smith    VecSetValues() uses 0-based indices in Fortran as well as in C.
3101d73ed98SBarry Smith 
3111d73ed98SBarry Smith    Level: beginner
3121d73ed98SBarry Smith 
3131d73ed98SBarry Smith .seealso: VecSetValues(), VecAssemblyBegin(), VecAssemblyEnd(), VecSetValuesBlockedLocal(), VecSetValueLocal()
3141d73ed98SBarry Smith M*/
31550755921SBarry Smith PETSC_STATIC_INLINE PetscErrorCode VecSetValue(Vec v,PetscInt i,PetscScalar va,InsertMode mode) {return VecSetValues(v,1,&i,&va,mode);}
3161d73ed98SBarry Smith 
31730de9b25SBarry Smith 
3180c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSetBlockSize(Vec,PetscInt);
3190c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGetBlockSize(Vec,PetscInt*);
320fcd5dd21SSatish Balay PetscPolymorphicFunction(VecGetBlockSize,(Vec x),(x,&i),PetscInt,i)
3210c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSetValuesBlocked(Vec,PetscInt,const PetscInt[],const PetscScalar[],InsertMode);
3228ed539a5SBarry Smith 
323fd487807SMatthew Knepley /* Dynamic creation and loading functions */
324fd487807SMatthew Knepley extern PetscFList VecList;
325ace3abfcSBarry Smith extern PetscBool  VecRegisterAllCalled;
326a313700dSBarry Smith EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSetType(Vec, const VecType);
327a313700dSBarry Smith EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGetType(Vec, const VecType *);
3280c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecRegister(const char[],const char[],const char[],PetscErrorCode (*)(Vec));
3290c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecRegisterAll(const char []);
3300c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecRegisterDestroy(void);
33130de9b25SBarry Smith 
33230de9b25SBarry Smith /*MC
33330de9b25SBarry Smith   VecRegisterDynamic - Adds a new vector component implementation
33430de9b25SBarry Smith 
33530de9b25SBarry Smith   Synopsis:
3361890ba74SBarry Smith   PetscErrorCode VecRegisterDynamic(const char *name, const char *path, const char *func_name, PetscErrorCode (*create_func)(Vec))
33730de9b25SBarry Smith 
33830de9b25SBarry Smith   Not Collective
33930de9b25SBarry Smith 
34030de9b25SBarry Smith   Input Parameters:
34130de9b25SBarry Smith + name        - The name of a new user-defined creation routine
34230de9b25SBarry Smith . path        - The path (either absolute or relative) of the library containing this routine
34330de9b25SBarry Smith . func_name   - The name of routine to create method context
34430de9b25SBarry Smith - create_func - The creation routine itself
34530de9b25SBarry Smith 
34630de9b25SBarry Smith   Notes:
34730de9b25SBarry Smith   VecRegisterDynamic() may be called multiple times to add several user-defined vectors
34830de9b25SBarry Smith 
34930de9b25SBarry Smith   If dynamic libraries are used, then the fourth input argument (routine_create) is ignored.
35030de9b25SBarry Smith 
35130de9b25SBarry Smith   Sample usage:
35230de9b25SBarry Smith .vb
35330de9b25SBarry Smith     VecRegisterDynamic("my_vec","/home/username/my_lib/lib/libO/solaris/libmy.a", "MyVectorCreate", MyVectorCreate);
35430de9b25SBarry Smith .ve
35530de9b25SBarry Smith 
35630de9b25SBarry Smith   Then, your vector type can be chosen with the procedural interface via
35730de9b25SBarry Smith .vb
35830de9b25SBarry Smith     VecCreate(MPI_Comm, Vec *);
35930de9b25SBarry Smith     VecSetType(Vec,"my_vector_name");
36030de9b25SBarry Smith .ve
36130de9b25SBarry Smith    or at runtime via the option
36230de9b25SBarry Smith .vb
36330de9b25SBarry Smith     -vec_type my_vector_name
36430de9b25SBarry Smith .ve
36530de9b25SBarry Smith 
366ab901514SBarry Smith   Notes: $PETSC_ARCH occuring in pathname will be replaced with appropriate values.
36730de9b25SBarry Smith          If your function is not being put into a shared library then use VecRegister() instead
36830de9b25SBarry Smith 
36930de9b25SBarry Smith   Level: advanced
37030de9b25SBarry Smith 
37130de9b25SBarry Smith .keywords: Vec, register
37230de9b25SBarry Smith .seealso: VecRegisterAll(), VecRegisterDestroy(), VecRegister()
37330de9b25SBarry Smith M*/
374aa482453SBarry Smith #if defined(PETSC_USE_DYNAMIC_LIBRARIES)
375f1af5d2fSBarry Smith #define VecRegisterDynamic(a,b,c,d) VecRegister(a,b,c,0)
37688d459dfSBarry Smith #else
377f1af5d2fSBarry Smith #define VecRegisterDynamic(a,b,c,d) VecRegister(a,b,c,d)
37888d459dfSBarry Smith #endif
37988d459dfSBarry Smith 
38009321671SBarry Smith 
3810c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecScatterCreate(Vec,IS,Vec,IS,VecScatter *);
382fcd5dd21SSatish Balay PetscPolymorphicFunction(VecScatterCreate,(Vec x,IS is1,Vec y,IS is2),(x,is1,y,is2,&s),VecScatter,s)
3830190745aSSatish Balay PetscPolymorphicSubroutine(VecScatterCreate,(Vec x,IS is,Vec y,VecScatter *s),(x,is,y,PETSC_NULL,s))
384fcd5dd21SSatish Balay PetscPolymorphicFunction(VecScatterCreate,(Vec x,IS is,Vec y),(x,is,y,PETSC_NULL,&s),VecScatter,s)
3850190745aSSatish Balay PetscPolymorphicSubroutine(VecScatterCreate,(Vec x,Vec y,IS is,VecScatter *s),(x,PETSC_NULL,y,is,s))
386fcd5dd21SSatish Balay PetscPolymorphicFunction(VecScatterCreate,(Vec x,Vec y,IS is),(x,PETSC_NULL,y,is,&s),VecScatter,s)
387450faa77SMatthew Knepley EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecScatterCreateEmpty(MPI_Comm,VecScatter *);
388fbb399caSBarry Smith EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecScatterCreateLocal(VecScatter,PetscInt,const PetscInt[],const PetscInt[],const PetscInt[],PetscInt,const PetscInt[],const PetscInt[],const PetscInt[],PetscInt);
389ca9f406cSSatish Balay EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecScatterBegin(VecScatter,Vec,Vec,InsertMode,ScatterMode);
390ca9f406cSSatish Balay EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecScatterEnd(VecScatter,Vec,Vec,InsertMode,ScatterMode);
3910c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecScatterDestroy(VecScatter);
3920c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecScatterCopy(VecScatter,VecScatter *);
3930c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecScatterView(VecScatter,PetscViewer);
3940c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecScatterRemap(VecScatter,PetscInt *,PetscInt*);
395ace3abfcSBarry Smith EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecScatterGetMerged(VecScatter,PetscBool *);
3962195c698SBarry Smith 
3970c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGetArray_Private(Vec,PetscScalar*[]);
3980c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecRestoreArray_Private(Vec,PetscScalar*[]);
3990c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGetArray4d(Vec,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscScalar****[]);
4000c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecRestoreArray4d(Vec,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscScalar****[]);
4010c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGetArray3d(Vec,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscScalar***[]);
4020c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecRestoreArray3d(Vec,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscScalar***[]);
4030c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGetArray2d(Vec,PetscInt,PetscInt,PetscInt,PetscInt,PetscScalar**[]);
4040c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecRestoreArray2d(Vec,PetscInt,PetscInt,PetscInt,PetscInt,PetscScalar**[]);
4050c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGetArray1d(Vec,PetscInt,PetscInt,PetscScalar *[]);
4060c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecRestoreArray1d(Vec,PetscInt,PetscInt,PetscScalar *[]);
407ab360428SBarry Smith 
4080c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecPlaceArray(Vec,const PetscScalar[]);
4090c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecResetArray(Vec);
4100c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecReplaceArray(Vec,const PetscScalar[]);
4110c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGetArrays(const Vec[],PetscInt,PetscScalar**[]);
4120c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecRestoreArrays(const Vec[],PetscInt,PetscScalar**[]);
41384cb2905SBarry Smith 
414ace3abfcSBarry Smith EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecValid(Vec,PetscBool *);
4150c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecView(Vec,PetscViewer);
4164e2ffeddSBarry Smith EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecViewFromOptions(Vec, const char *);
417ace3abfcSBarry Smith EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecEqual(Vec,Vec,PetscBool *);
418ace3abfcSBarry Smith PetscPolymorphicFunction(VecEqual,(Vec x,Vec y),(x,y,&s),PetscBool ,s)
41986ec2c25SShri Abhyankar EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecLoad(Vec, PetscViewer);
4208ed539a5SBarry Smith 
4210c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGetSize(Vec,PetscInt*);
422fcd5dd21SSatish Balay PetscPolymorphicFunction(VecGetSize,(Vec x),(x,&s),PetscInt,s)
4230c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGetLocalSize(Vec,PetscInt*);
424fcd5dd21SSatish Balay PetscPolymorphicFunction(VecGetLocalSize,(Vec x),(x,&s),PetscInt,s)
4250c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGetOwnershipRange(Vec,PetscInt*,PetscInt*);
42606709851SBarry Smith EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGetOwnershipRanges(Vec,const PetscInt *[]);
4278ed539a5SBarry Smith 
4280c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSetLocalToGlobalMapping(Vec,ISLocalToGlobalMapping);
4290c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSetValuesLocal(Vec,PetscInt,const PetscInt[],const PetscScalar[],InsertMode);
43088b03592SBarry Smith 
43188b03592SBarry Smith /*MC
43288b03592SBarry Smith    VecSetValueLocal - Set a single entry into a vector using the local numbering
43388b03592SBarry Smith 
43488b03592SBarry Smith    Synopsis:
43588b03592SBarry Smith    PetscErrorCode VecSetValueLocal(Vec v,int row,PetscScalar value, InsertMode mode);
43688b03592SBarry Smith 
43788b03592SBarry Smith    Not Collective
43888b03592SBarry Smith 
43988b03592SBarry Smith    Input Parameters:
44088b03592SBarry Smith +  v - the vector
44188b03592SBarry Smith .  row - the row location of the entry
44288b03592SBarry Smith .  value - the value to insert
44388b03592SBarry Smith -  mode - either INSERT_VALUES or ADD_VALUES
44488b03592SBarry Smith 
44588b03592SBarry Smith    Notes:
44688b03592SBarry Smith    For efficiency one should use VecSetValues() and set several or
44788b03592SBarry Smith    many values simultaneously if possible.
44888b03592SBarry Smith 
44988b03592SBarry Smith    These values may be cached, so VecAssemblyBegin() and VecAssemblyEnd()
45088b03592SBarry Smith    MUST be called after all calls to VecSetValues() have been completed.
45188b03592SBarry Smith 
45288b03592SBarry Smith    VecSetValues() uses 0-based indices in Fortran as well as in C.
45388b03592SBarry Smith 
45488b03592SBarry Smith    Level: beginner
45588b03592SBarry Smith 
45688b03592SBarry Smith .seealso: VecSetValues(), VecAssemblyBegin(), VecAssemblyEnd(), VecSetValuesBlockedLocal(), VecSetValue()
45788b03592SBarry Smith M*/
45888b03592SBarry Smith PETSC_STATIC_INLINE PetscErrorCode VecSetValueLocal(Vec v,PetscInt i,PetscScalar va,InsertMode mode) {return VecSetValuesLocal(v,1,&i,&va,mode);}
45988b03592SBarry Smith 
4600c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSetLocalToGlobalMappingBlock(Vec,ISLocalToGlobalMapping);
4610c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSetValuesBlockedLocal(Vec,PetscInt,const PetscInt[],const PetscScalar[],InsertMode);
46290f02eecSBarry Smith 
4630c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecDotBegin(Vec,Vec,PetscScalar *);
464ba966639SSatish Balay PetscPolymorphicSubroutine(VecDotBegin,(Vec x,Vec y),(x,y,PETSC_NULL))
4650c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecDotEnd(Vec,Vec,PetscScalar *);
466fcd5dd21SSatish Balay PetscPolymorphicFunction(VecDotEnd,(Vec x,Vec y),(x,y,&s),PetscScalar,s)
4670c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecTDotBegin(Vec,Vec,PetscScalar *);
468ba966639SSatish Balay PetscPolymorphicSubroutine(VecTDotBegin,(Vec x,Vec y),(x,y,PETSC_NULL))
4690c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecTDotEnd(Vec,Vec,PetscScalar *);
470fcd5dd21SSatish Balay PetscPolymorphicFunction(VecTDotEnd,(Vec x,Vec y),(x,y,&s),PetscScalar,s)
4710c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecNormBegin(Vec,NormType,PetscReal *);
472ba966639SSatish Balay PetscPolymorphicSubroutine(VecNormBegin,(Vec x,NormType t),(x,t,PETSC_NULL))
473ba966639SSatish Balay PetscPolymorphicSubroutine(VecNormBegin,(Vec x),(x,NORM_2,PETSC_NULL))
4740c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecNormEnd(Vec,NormType,PetscReal *);
475fcd5dd21SSatish Balay PetscPolymorphicFunction(VecNormEnd,(Vec x,NormType t),(x,t,&s),PetscReal,s)
476fcd5dd21SSatish Balay PetscPolymorphicFunction(VecNormEnd,(Vec x),(x,NORM_2,&s),PetscReal,s)
477d3c178dbSBarry Smith 
478bb9195b6SBarry Smith EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecMDotBegin(Vec,PetscInt,const Vec[],PetscScalar[]);
479bb9195b6SBarry Smith EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecMDotEnd(Vec,PetscInt,const Vec[],PetscScalar[]);
480bb9195b6SBarry Smith EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecMTDotBegin(Vec,PetscInt,const Vec[],PetscScalar[]);
481bb9195b6SBarry Smith EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecMTDotEnd(Vec,PetscInt,const Vec[],PetscScalar[]);
482a751f32aSSatish Balay 
483a751f32aSSatish Balay 
4849533e83fSBarry Smith typedef enum {VEC_IGNORE_OFF_PROC_ENTRIES,VEC_IGNORE_NEGATIVE_INDICES} VecOption;
485ace3abfcSBarry Smith EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSetOption(Vec,VecOption,PetscBool );
48690f02eecSBarry Smith 
487ebe3b25bSBarry Smith /*
488ebe3b25bSBarry Smith    Expose VecGetArray()/VecRestoreArray() to users. Allows this to work without any function
489ebe3b25bSBarry Smith    call overhead on any 'native' Vecs.
490ebe3b25bSBarry Smith */
491e1fa1e0fSSatish Balay 
4921d8d5f9aSSatish Balay #include "private/vecimpl.h"
493ebe3b25bSBarry Smith 
4940c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecContourScale(Vec,PetscReal,PetscReal);
495522c5e43SBarry Smith 
49615091d37SBarry Smith /*
49715091d37SBarry Smith     These numbers need to match the entries in
4983c94ec11SBarry Smith   the function table in vecimpl.h
49915091d37SBarry Smith */
5002dcb2ebcSBarry Smith typedef enum { VECOP_VIEW = 33, VECOP_LOAD = 41, VECOP_DUPLICATE = 0} VecOperation;
5010c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSetOperation(Vec,VecOperation,void(*)(void));
502b19c1e4cSBarry Smith 
503e182c471SBarry Smith /*
504e182c471SBarry Smith      Routines for dealing with ghosted vectors:
505e182c471SBarry Smith   vectors with ghost elements at the end of the array.
506e182c471SBarry Smith */
5070c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecCreateGhost(MPI_Comm,PetscInt,PetscInt,PetscInt,const PetscInt[],Vec*);
5080c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecCreateGhostWithArray(MPI_Comm,PetscInt,PetscInt,PetscInt,const PetscInt[],const PetscScalar[],Vec*);
5090c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecCreateGhostBlock(MPI_Comm,PetscInt,PetscInt,PetscInt,PetscInt,const PetscInt[],Vec*);
5100c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecCreateGhostBlockWithArray(MPI_Comm,PetscInt,PetscInt,PetscInt,PetscInt,const PetscInt[],const PetscScalar[],Vec*);
5110c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGhostGetLocalForm(Vec,Vec*);
512ba966639SSatish Balay PetscPolymorphicFunction(VecGhostGetLocalForm,(Vec x),(x,&s),Vec,s)
5130c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGhostRestoreLocalForm(Vec,Vec*);
5140c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGhostUpdateBegin(Vec,InsertMode,ScatterMode);
5150c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGhostUpdateEnd(Vec,InsertMode,ScatterMode);
516e182c471SBarry Smith 
5170c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecConjugate(Vec);
51834233285SBarry Smith 
5190c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecScatterCreateToAll(Vec,VecScatter*,Vec*);
5200c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecScatterCreateToZero(Vec,VecScatter*,Vec*);
521bba1ac68SSatish Balay 
5220c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT PetscViewerMathematicaGetVector(PetscViewer, Vec);
5230c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT PetscViewerMathematicaPutVector(PetscViewer, Vec);
5247dbadf16SMatthew Knepley 
525d59c15a7SBarry Smith /*S
526d59c15a7SBarry Smith      Vecs - Collection of vectors where the data for the vectors is stored in
527759e7b9cSHong Zhang             one contiguous memory
528d59c15a7SBarry Smith 
529d59c15a7SBarry Smith    Level: advanced
530d59c15a7SBarry Smith 
531d59c15a7SBarry Smith    Notes:
532d59c15a7SBarry Smith     Temporary construct for handling multiply right hand side solves
533d59c15a7SBarry Smith 
534d59c15a7SBarry Smith     This is faked by storing a single vector that has enough array space for
535d59c15a7SBarry Smith     n vectors
536d59c15a7SBarry Smith 
537d59c15a7SBarry Smith   Concepts: parallel decomposition
538d59c15a7SBarry Smith 
539d59c15a7SBarry Smith S*/
54095fbd943SSatish Balay         struct _n_Vecs  {PetscInt n; Vec v;};
54195fbd943SSatish Balay typedef struct _n_Vecs* Vecs;
542d59c15a7SBarry Smith #define VecsDestroy(x)            (VecDestroy((x)->v)         || PetscFree(x))
54395fbd943SSatish Balay #define VecsCreateSeq(comm,p,m,x) (PetscNew(struct _n_Vecs,x) || VecCreateSeq(comm,p*m,&(*(x))->v) || (-1 == ((*(x))->n = (m))))
54495fbd943SSatish Balay #define VecsCreateSeqWithArray(comm,p,m,a,x) (PetscNew(struct _n_Vecs,x) || VecCreateSeqWithArray(comm,p*m,a,&(*(x))->v) || (-1 == ((*(x))->n = (m))))
54595fbd943SSatish Balay #define VecsDuplicate(x,y)        (PetscNew(struct _n_Vecs,y) || VecDuplicate(x->v,&(*(y))->v) || (-1 == ((*(y))->n = (x)->n)))
546e9fa29b7SSatish Balay 
547a5891931SBarry Smith #if defined(PETSC_HAVE_CUDA)
548a5891931SBarry Smith typedef struct _p_PetscCUSPIndices* PetscCUSPIndices;
549a5891931SBarry Smith extern PetscErrorCode PetscCUSPIndicesCreate(PetscInt,const PetscInt*,PetscCUSPIndices*);
550a5891931SBarry Smith extern PetscErrorCode PetscCUSPIndicesDestroy(PetscCUSPIndices);
551a5891931SBarry Smith extern PetscErrorCode VecCUDACopyToGPUSome_Public(Vec,PetscCUSPIndices);
552e659c2d2SVictor Minden extern PetscErrorCode VecCUDACopyFromGPUSome_Public(Vec,PetscCUSPIndices);
553a5891931SBarry Smith #endif
554e9fa29b7SSatish Balay 
55545b63f25SDmitry Karpeev #if defined PETSC_HAVE_VECDD
556f85a4658SSatish Balay extern PetscErrorCode PETSCVEC_DLLEXPORT VecDDSetDomainsLocal(Vec v, PetscInt domain_count, PetscInt supported_domains[], PetscInt domain_limits[], PetscBool covering);
557f85a4658SSatish Balay extern PetscErrorCode PETSCVEC_DLLEXPORT VecDDSetDomainsLocalIS(Vec v, IS supported_domains, IS domain_limits[], PetscBool covering);
558c4ab1982SDmitry Karpeev extern PetscErrorCode PETSCVEC_DLLEXPORT VecDDGetDomainInfoLocal(Vec v, PetscInt i, PetscInt *d, PetscInt *size);
559c4ab1982SDmitry Karpeev extern PetscErrorCode PETSCVEC_DLLEXPORT VecDDGetDomainArrayLocal(Vec v, PetscInt i, PetscScalar **array);
560c4ab1982SDmitry Karpeev extern PetscErrorCode PETSCVEC_DLLEXPORT VecDDRestoreDomainArrayLocal(Vec v, PetscInt i, PetscScalar **array);
56145b63f25SDmitry Karpeev #endif
56245b63f25SDmitry Karpeev 
563*1aae2881SJed Brown EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecNestGetSubVecs(Vec,PetscInt*,Vec**);
564*1aae2881SJed Brown EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecNestGetSubVec(Vec,PetscInt,Vec*);
565*1aae2881SJed Brown EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecNestSetSubVec(Vec,const PetscInt,const Vec);
566*1aae2881SJed Brown EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecNestSetSubVecs(Vec,PetscInt,const PetscInt*,const Vec*);
56745b63f25SDmitry Karpeev 
568e9fa29b7SSatish Balay PETSC_EXTERN_CXX_END
5692eac72dbSBarry Smith #endif
570