xref: /petsc/include/petscvec.h (revision 803a1b88aaf064f77b7e8a1e734ca3337ad7e656)
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
92c8e378dSBarry Smith #include <petscis.h>
10665c2dedSJed Brown #include <petscviewer.h>
112eac72dbSBarry Smith 
1209321671SBarry Smith /*S
1309321671SBarry Smith      Vec - Abstract PETSc vector object
1409321671SBarry Smith 
1509321671SBarry Smith    Level: beginner
1609321671SBarry Smith 
1709321671SBarry Smith   Concepts: field variables, unknowns, arrays
1809321671SBarry Smith 
1909321671SBarry Smith .seealso:  VecCreate(), VecType, VecSetType()
2009321671SBarry Smith S*/
21f09e8eb9SSatish Balay typedef struct _p_Vec*         Vec;
2209321671SBarry Smith 
2309321671SBarry Smith /*S
2409321671SBarry Smith      VecScatter - Object used to manage communication of data
2509321671SBarry Smith        between vectors in parallel. Manages both scatters and gathers
2609321671SBarry Smith 
2709321671SBarry Smith    Level: beginner
2809321671SBarry Smith 
2909321671SBarry Smith   Concepts: scatter
3009321671SBarry Smith 
3109321671SBarry Smith .seealso:  VecScatterCreate(), VecScatterBegin(), VecScatterEnd()
3209321671SBarry Smith S*/
33f09e8eb9SSatish Balay typedef struct _p_VecScatter*  VecScatter;
3409321671SBarry Smith 
3509321671SBarry Smith /*E
36398c84b2SBarry Smith   ScatterMode - Determines the direction of a scatter
37398c84b2SBarry Smith 
38398c84b2SBarry Smith   Level: beginner
39398c84b2SBarry Smith 
40398c84b2SBarry Smith .seealso: VecScatter, VecScatterBegin(), VecScatterEnd()
41398c84b2SBarry Smith E*/
42398c84b2SBarry Smith typedef enum {SCATTER_FORWARD=0, SCATTER_REVERSE=1, SCATTER_FORWARD_LOCAL=2, SCATTER_REVERSE_LOCAL=3, SCATTER_LOCAL=2} ScatterMode;
43398c84b2SBarry Smith 
44398c84b2SBarry Smith /*MC
45398c84b2SBarry Smith     SCATTER_FORWARD - Scatters the values as dictated by the VecScatterCreate() call
46398c84b2SBarry Smith 
47398c84b2SBarry Smith     Level: beginner
48398c84b2SBarry Smith 
49398c84b2SBarry Smith .seealso: VecScatter, ScatterMode, VecScatterCreate(), VecScatterBegin(), VecScatterEnd(), SCATTER_REVERSE, SCATTER_FORWARD_LOCAL,
50398c84b2SBarry Smith           SCATTER_REVERSE_LOCAL
51398c84b2SBarry Smith 
52398c84b2SBarry Smith M*/
53398c84b2SBarry Smith 
54398c84b2SBarry Smith /*MC
55398c84b2SBarry Smith     SCATTER_REVERSE - Moves the values in the opposite direction then the directions indicated in
56398c84b2SBarry Smith          in the VecScatterCreate()
57398c84b2SBarry Smith 
58398c84b2SBarry Smith     Level: beginner
59398c84b2SBarry Smith 
60398c84b2SBarry Smith .seealso: VecScatter, ScatterMode, VecScatterCreate(), VecScatterBegin(), VecScatterEnd(), SCATTER_FORWARD, SCATTER_FORWARD_LOCAL,
61398c84b2SBarry Smith           SCATTER_REVERSE_LOCAL
62398c84b2SBarry Smith 
63398c84b2SBarry Smith M*/
64398c84b2SBarry Smith 
65398c84b2SBarry Smith /*MC
66398c84b2SBarry Smith     SCATTER_FORWARD_LOCAL - Scatters the values as dictated by the VecScatterCreate() call except NO parallel communication
67398c84b2SBarry Smith        is done. Any variables that have be moved between processes are ignored
68398c84b2SBarry Smith 
69398c84b2SBarry Smith     Level: developer
70398c84b2SBarry Smith 
71398c84b2SBarry Smith .seealso: VecScatter, ScatterMode, VecScatterCreate(), VecScatterBegin(), VecScatterEnd(), SCATTER_REVERSE, SCATTER_FORWARD,
72398c84b2SBarry Smith           SCATTER_REVERSE_LOCAL
73398c84b2SBarry Smith 
74398c84b2SBarry Smith M*/
75398c84b2SBarry Smith 
76398c84b2SBarry Smith /*MC
77398c84b2SBarry Smith     SCATTER_REVERSE_LOCAL - Moves the values in the opposite direction then the directions indicated in
78398c84b2SBarry Smith          in the VecScatterCreate()  except NO parallel communication
79398c84b2SBarry Smith        is done. Any variables that have be moved between processes are ignored
80398c84b2SBarry Smith 
81398c84b2SBarry Smith     Level: developer
82398c84b2SBarry Smith 
83398c84b2SBarry Smith .seealso: VecScatter, ScatterMode, VecScatterCreate(), VecScatterBegin(), VecScatterEnd(), SCATTER_FORWARD, SCATTER_FORWARD_LOCAL,
84398c84b2SBarry Smith           SCATTER_REVERSE
85398c84b2SBarry Smith 
86398c84b2SBarry Smith M*/
87398c84b2SBarry Smith 
8876bdecfbSBarry Smith /*J
898f6c3df8SBarry Smith     VecType - String with the name of a PETSc vector
9009321671SBarry Smith 
9109321671SBarry Smith    Level: beginner
9209321671SBarry Smith 
938f6c3df8SBarry Smith .seealso: VecSetType(), Vec, VecCreate(), VecDestroy()
9476bdecfbSBarry Smith J*/
9519fd82e9SBarry Smith typedef const char* VecType;
960676abe4SMatthew Knepley #define VECSEQ         "seq"
970676abe4SMatthew Knepley #define VECMPI         "mpi"
98f48c50deSBarry Smith #define VECSTANDARD    "standard"   /* seq on one process and mpi on several */
990676abe4SMatthew Knepley #define VECSHARED      "shared"
1008154be41SBarry Smith #define VECSEQCUSP     "seqcusp"
1018154be41SBarry Smith #define VECMPICUSP     "mpicusp"
1028154be41SBarry Smith #define VECCUSP        "cusp"       /* seqcusp on one process and mpicusp on several */
103b17c682bSKarl Rupp #define VECSEQVIENNACL "seqviennacl"
104b17c682bSKarl Rupp #define VECMPIVIENNACL "mpiviennacl"
105b17c682bSKarl Rupp #define VECVIENNACL    "viennacl"   /* seqviennacl on one process and mpiviennacl on several */
10682f73ecaSAlejandro Lamas Daviña #define VECSEQCUDA     "seqcuda"
10782f73ecaSAlejandro Lamas Daviña #define VECMPICUDA     "mpicuda"
10882f73ecaSAlejandro Lamas Daviña #define VECCUDA        "cuda"       /* seqcuda on one process and mpicuda on several */
1091aae2881SJed Brown #define VECNEST        "nest"
110*803a1b88SHong Zhang #define VECNODE        "node"       /* use on-node shared memory */
1112eac72dbSBarry Smith 
112*803a1b88SHong Zhang /*J
113*803a1b88SHong Zhang     VecScatterType - String with the name of a PETSc vector scatter type
114*803a1b88SHong Zhang 
115*803a1b88SHong Zhang    Level: beginner
116*803a1b88SHong Zhang 
117*803a1b88SHong Zhang .seealso: VecScatterSetType(), VecScatter, VecScatterCreate(), VecScatterDestroy()
118*803a1b88SHong Zhang J*/
119*803a1b88SHong Zhang typedef const char* VecScatterType;
120*803a1b88SHong Zhang #define VECSCATTERSEQ       "seq"
121*803a1b88SHong Zhang #define VECSCATTERMPI1      "mpi1"
122*803a1b88SHong Zhang #define VECSCATTERMPI3      "mpi3"     /* use MPI3 on-node shared memory */
123*803a1b88SHong Zhang #define VECSCATTERMPI3NODE  "mpi3node" /* use MPI3 on-node shared memory for vector type VECNODE */
124*803a1b88SHong Zhang 
125*803a1b88SHong Zhang /* Dynamic creation and loading functions */
126*803a1b88SHong Zhang PETSC_EXTERN PetscFunctionList VecScatterList;
127*803a1b88SHong Zhang PETSC_EXTERN PetscErrorCode VecScatterSetType(VecScatter, VecScatterType);
128*803a1b88SHong Zhang PETSC_EXTERN PetscErrorCode VecScatterGetType(VecScatter, VecScatterType *);
129*803a1b88SHong Zhang PETSC_EXTERN PetscErrorCode VecScatterSetFromOptions(VecScatter);
130*803a1b88SHong Zhang PETSC_EXTERN PetscErrorCode VecScatterRegister(const char[],PetscErrorCode (*)(VecScatter));
131*803a1b88SHong Zhang PETSC_EXTERN PetscErrorCode VecScatterCreate(Vec,IS,Vec,IS,VecScatter*);
132*803a1b88SHong Zhang PETSC_EXTERN PetscErrorCode VecScatterInitializePackage(void);
133*803a1b88SHong Zhang PETSC_EXTERN PetscErrorCode VecScatterFinalizePackage(void);
1344b71561bSShri Abhyankar 
135fd487807SMatthew Knepley /* Logging support */
136450a797fSBarry Smith #define    REAL_FILE_CLASSID 1211213
1370700a824SBarry Smith #define    VEC_FILE_CLASSID 1211214
138014dd563SJed Brown PETSC_EXTERN PetscClassId VEC_CLASSID;
139014dd563SJed Brown PETSC_EXTERN PetscClassId VEC_SCATTER_CLASSID;
1408ba1e511SMatthew Knepley 
14145b63f25SDmitry Karpeev 
142607a6623SBarry Smith PETSC_EXTERN PetscErrorCode VecInitializePackage(void);
143014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecFinalizePackage(void);
144fd487807SMatthew Knepley 
145014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecCreate(MPI_Comm,Vec*);
146014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecCreateSeq(MPI_Comm,PetscInt,Vec*);
147014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecCreateMPI(MPI_Comm,PetscInt,PetscInt,Vec*);
148014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecCreateSeqWithArray(MPI_Comm,PetscInt,PetscInt,const PetscScalar[],Vec*);
149014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecCreateMPIWithArray(MPI_Comm,PetscInt,PetscInt,PetscInt,const PetscScalar[],Vec*);
150014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecCreateShared(MPI_Comm,PetscInt,PetscInt,Vec*);
151*803a1b88SHong Zhang PETSC_EXTERN PetscErrorCode VecCreateNode(MPI_Comm,PetscInt,PetscInt,Vec*);
152*803a1b88SHong Zhang 
153014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecSetFromOptions(Vec);
154685405a1SBarry Smith PETSC_STATIC_INLINE PetscErrorCode VecViewFromOptions(Vec A,PetscObject B,const char name[]) {return PetscObjectViewFromOptions((PetscObject)A,B,name);}
1550d2bece7SBarry Smith 
156014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecSetUp(Vec);
157014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecDestroy(Vec*);
158014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecZeroEntries(Vec);
159014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecSetOptionsPrefix(Vec,const char[]);
160014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecAppendOptionsPrefix(Vec,const char[]);
161014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecGetOptionsPrefix(Vec,const char*[]);
162f69a0ea3SMatthew Knepley 
163014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecSetSizes(Vec,PetscInt,PetscInt);
164fd487807SMatthew Knepley 
16552b6e47cSBarry Smith PETSC_EXTERN PetscErrorCode VecDotNorm2(Vec,Vec,PetscScalar*,PetscReal*);
166014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecDot(Vec,Vec,PetscScalar*);
16767392de3SBarry Smith PETSC_EXTERN PetscErrorCode VecDotRealPart(Vec,Vec,PetscReal*);
168014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecTDot(Vec,Vec,PetscScalar*);
169014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecMDot(Vec,PetscInt,const Vec[],PetscScalar[]);
170014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecMTDot(Vec,PetscInt,const Vec[],PetscScalar[]);
171014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecGetSubVector(Vec,IS,Vec*);
172014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecRestoreSubVector(Vec,IS,Vec*);
173cddf8d76SBarry Smith 
17409321671SBarry Smith /*E
17509321671SBarry Smith     NormType - determines what type of norm to compute
17609321671SBarry Smith 
17709321671SBarry Smith     Level: beginner
17809321671SBarry Smith 
17909321671SBarry Smith .seealso: VecNorm(), VecNormBegin(), VecNormEnd(), MatNorm()
18009321671SBarry Smith E*/
1819dcbbd2bSBarry Smith typedef enum {NORM_1=0,NORM_2=1,NORM_FROBENIUS=2,NORM_INFINITY=3,NORM_1_AND_2=4} NormType;
1826a6fc655SJed Brown PETSC_EXTERN const char *const NormTypes[];
183cddf8d76SBarry Smith #define NORM_MAX NORM_INFINITY
18409321671SBarry Smith 
1859b250c83SBarry Smith /*MC
1869b250c83SBarry Smith      NORM_1 - the one norm, ||v|| = sum_i | v_i |. ||A|| = max_j || v_*j ||, maximum column sum
1879b250c83SBarry Smith 
1889b250c83SBarry Smith    Level: beginner
1899b250c83SBarry Smith 
1909b250c83SBarry Smith .seealso:  NormType, MatNorm(), VecNorm(), VecNormBegin(), VecNormEnd(), NORM_2, NORM_FROBENIUS,
1919b250c83SBarry Smith            NORM_INFINITY, NORM_1_AND_2
1929b250c83SBarry Smith 
1939b250c83SBarry Smith M*/
1949b250c83SBarry Smith 
1959b250c83SBarry Smith /*MC
196df54d55cSMatthias Liertzer      NORM_2 - the two norm, ||v|| = sqrt(sum_i |v_i|^2) (vectors only)
1979b250c83SBarry Smith 
1989b250c83SBarry Smith    Level: beginner
1999b250c83SBarry Smith 
2009b250c83SBarry Smith .seealso:  NormType, MatNorm(), VecNorm(), VecNormBegin(), VecNormEnd(), NORM_1, NORM_FROBENIUS,
2019b250c83SBarry Smith            NORM_INFINITY, NORM_1_AND_2
2029b250c83SBarry Smith 
2039b250c83SBarry Smith M*/
2049b250c83SBarry Smith 
2059b250c83SBarry Smith /*MC
206df54d55cSMatthias Liertzer      NORM_FROBENIUS - ||A|| = sqrt(sum_ij |A_ij|^2), same as NORM_2 for vectors
2079b250c83SBarry Smith 
2089b250c83SBarry Smith    Level: beginner
2099b250c83SBarry Smith 
2109b250c83SBarry Smith .seealso:  NormType, MatNorm(), VecNorm(), VecNormBegin(), VecNormEnd(), NORM_1, NORM_2,
2119b250c83SBarry Smith            NORM_INFINITY, NORM_1_AND_2
2129b250c83SBarry Smith 
2139b250c83SBarry Smith M*/
2149b250c83SBarry Smith 
2159b250c83SBarry Smith /*MC
2169b250c83SBarry Smith      NORM_INFINITY - ||v|| = max_i |v_i|. ||A|| = max_i || v_i* ||, maximum row sum
2179b250c83SBarry Smith 
2189b250c83SBarry Smith    Level: beginner
2199b250c83SBarry Smith 
2209b250c83SBarry Smith .seealso:  NormType, MatNorm(), VecNorm(), VecNormBegin(), VecNormEnd(), NORM_1, NORM_2,
2219b250c83SBarry Smith            NORM_FROBINIUS, NORM_1_AND_2
2229b250c83SBarry Smith 
2239b250c83SBarry Smith M*/
2249b250c83SBarry Smith 
2259b250c83SBarry Smith /*MC
2269b250c83SBarry Smith      NORM_1_AND_2 - computes both the 1 and 2 norm of a vector
2279b250c83SBarry Smith 
2289b250c83SBarry Smith    Level: beginner
2299b250c83SBarry Smith 
2309b250c83SBarry Smith .seealso:  NormType, MatNorm(), VecNorm(), VecNormBegin(), VecNormEnd(), NORM_1, NORM_2,
2319b250c83SBarry Smith            NORM_FROBINIUS, NORM_INFINITY
2329b250c83SBarry Smith 
2339b250c83SBarry Smith M*/
2349b250c83SBarry Smith 
2359b250c83SBarry Smith /*MC
2369b250c83SBarry Smith      NORM_MAX - see NORM_INFINITY
2379b250c83SBarry Smith 
238d41222bbSBarry Smith    Level: beginner
239d41222bbSBarry Smith 
2409b250c83SBarry Smith M*/
2419b250c83SBarry Smith 
242014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecNorm(Vec,NormType,PetscReal *);
243014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecNormAvailable(Vec,NormType,PetscBool *,PetscReal *);
244014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecNormalize(Vec,PetscReal *);
245014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecSum(Vec,PetscScalar*);
246014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecMax(Vec,PetscInt*,PetscReal *);
247014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecMin(Vec,PetscInt*,PetscReal *);
248014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecScale(Vec,PetscScalar);
249014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecCopy(Vec,Vec);
250014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecSetRandom(Vec,PetscRandom);
251014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecSet(Vec,PetscScalar);
252422a814eSBarry Smith PETSC_EXTERN PetscErrorCode VecSetInf(Vec);
253014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecSwap(Vec,Vec);
254014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecAXPY(Vec,PetscScalar,Vec);
255014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecAXPBY(Vec,PetscScalar,PetscScalar,Vec);
256014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecMAXPY(Vec,PetscInt,const PetscScalar[],Vec[]);
257014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecAYPX(Vec,PetscScalar,Vec);
258014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecWAXPY(Vec,PetscScalar,Vec,Vec);
259014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecAXPBYPCZ(Vec,PetscScalar,PetscScalar,PetscScalar,Vec,Vec);
260014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecPointwiseMax(Vec,Vec,Vec);
261014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecPointwiseMaxAbs(Vec,Vec,Vec);
262014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecPointwiseMin(Vec,Vec,Vec);
263014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecPointwiseMult(Vec,Vec,Vec);
264014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecPointwiseDivide(Vec,Vec,Vec);
265014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecMaxPointwiseDivide(Vec,Vec,PetscReal*);
266014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecShift(Vec,PetscScalar);
267014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecReciprocal(Vec);
268014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecPermute(Vec, IS, PetscBool );
269014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecSqrtAbs(Vec);
270014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecLog(Vec);
271014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecExp(Vec);
272014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecAbs(Vec);
273014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecDuplicate(Vec,Vec*);
274014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecDuplicateVecs(Vec,PetscInt,Vec*[]);
275014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecDestroyVecs(PetscInt, Vec*[]);
276014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecStrideNormAll(Vec,NormType,PetscReal[]);
277014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecStrideMaxAll(Vec,PetscInt [],PetscReal []);
278014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecStrideMinAll(Vec,PetscInt [],PetscReal []);
279014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecStrideScaleAll(Vec,const PetscScalar[]);
280849b11cfSMatthew G. Knepley PETSC_EXTERN PetscErrorCode VecUniqueEntries(Vec,PetscInt*,PetscScalar**);
2814a560884SBarry Smith 
282014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecStrideNorm(Vec,PetscInt,NormType,PetscReal*);
283014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecStrideMax(Vec,PetscInt,PetscInt *,PetscReal *);
284014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecStrideMin(Vec,PetscInt,PetscInt *,PetscReal *);
285014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecStrideScale(Vec,PetscInt,PetscScalar);
286014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecStrideSet(Vec,PetscInt,PetscScalar);
287954b3ec6SBarry Smith 
288954b3ec6SBarry Smith 
289014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecStrideGather(Vec,PetscInt,Vec,InsertMode);
290014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecStrideScatter(Vec,PetscInt,Vec,InsertMode);
291014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecStrideGatherAll(Vec,Vec[],InsertMode);
292014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecStrideScatterAll(Vec[],Vec,InsertMode);
293d2655a18SBarry Smith 
294bdeb6c88SBarry Smith PETSC_EXTERN PetscErrorCode VecStrideSubSetScatter(Vec,PetscInt,const PetscInt[],const PetscInt[],Vec,InsertMode);
295bdeb6c88SBarry Smith PETSC_EXTERN PetscErrorCode VecStrideSubSetGather(Vec,PetscInt,const PetscInt[],const PetscInt[],Vec,InsertMode);
296bdeb6c88SBarry Smith 
297014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecSetValues(Vec,PetscInt,const PetscInt[],const PetscScalar[],InsertMode);
298014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecGetValues(Vec,PetscInt,const PetscInt[],PetscScalar[]);
299014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecAssemblyBegin(Vec);
300014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecAssemblyEnd(Vec);
301014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecStashSetInitialSize(Vec,PetscInt,PetscInt);
302014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecStashView(Vec,PetscViewer);
303685405a1SBarry Smith PETSC_EXTERN PetscErrorCode VecStashViewFromOptions(Vec,PetscObject,const char[]);
304014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecStashGetInfo(Vec,PetscInt*,PetscInt*,PetscInt*,PetscInt*);
30562dc5420SSatish Balay 
30630de9b25SBarry Smith /*MC
30730de9b25SBarry Smith    VecSetValue - Set a single entry into a vector.
30830de9b25SBarry Smith 
30930de9b25SBarry Smith    Synopsis:
310aaa7dc30SBarry Smith    #include <petscvec.h>
3118122439eSJed Brown    PetscErrorCode VecSetValue(Vec v,PetscInt row,PetscScalar value, InsertMode mode);
31230de9b25SBarry Smith 
31330de9b25SBarry Smith    Not Collective
31430de9b25SBarry Smith 
31530de9b25SBarry Smith    Input Parameters:
31630de9b25SBarry Smith +  v - the vector
31730de9b25SBarry Smith .  row - the row location of the entry
31830de9b25SBarry Smith .  value - the value to insert
31930de9b25SBarry Smith -  mode - either INSERT_VALUES or ADD_VALUES
32030de9b25SBarry Smith 
32130de9b25SBarry Smith    Notes:
32230de9b25SBarry Smith    For efficiency one should use VecSetValues() and set several or
32330de9b25SBarry Smith    many values simultaneously if possible.
32430de9b25SBarry Smith 
3251d73ed98SBarry Smith    These values may be cached, so VecAssemblyBegin() and VecAssemblyEnd()
3261d73ed98SBarry Smith    MUST be called after all calls to VecSetValues() have been completed.
3271d73ed98SBarry Smith 
3281d73ed98SBarry Smith    VecSetValues() uses 0-based indices in Fortran as well as in C.
3291d73ed98SBarry Smith 
3301d73ed98SBarry Smith    Level: beginner
3311d73ed98SBarry Smith 
3321d73ed98SBarry Smith .seealso: VecSetValues(), VecAssemblyBegin(), VecAssemblyEnd(), VecSetValuesBlockedLocal(), VecSetValueLocal()
3331d73ed98SBarry Smith M*/
33450755921SBarry Smith PETSC_STATIC_INLINE PetscErrorCode VecSetValue(Vec v,PetscInt i,PetscScalar va,InsertMode mode) {return VecSetValues(v,1,&i,&va,mode);}
3351d73ed98SBarry Smith 
33630de9b25SBarry Smith 
337014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecSetBlockSize(Vec,PetscInt);
338014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecGetBlockSize(Vec,PetscInt*);
339014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecSetValuesBlocked(Vec,PetscInt,const PetscInt[],const PetscScalar[],InsertMode);
3408ed539a5SBarry Smith 
341fd487807SMatthew Knepley /* Dynamic creation and loading functions */
342140e18c1SBarry Smith PETSC_EXTERN PetscFunctionList VecList;
34319fd82e9SBarry Smith PETSC_EXTERN PetscErrorCode VecSetType(Vec, VecType);
34419fd82e9SBarry Smith PETSC_EXTERN PetscErrorCode VecGetType(Vec, VecType *);
345bdf89e91SBarry Smith PETSC_EXTERN PetscErrorCode VecRegister(const char[],PetscErrorCode (*)(Vec));
34630de9b25SBarry Smith 
347014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecScatterCreate(Vec,IS,Vec,IS,VecScatter *);
348014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecScatterCreateEmpty(MPI_Comm,VecScatter *);
349014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecScatterBegin(VecScatter,Vec,Vec,InsertMode,ScatterMode);
350014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecScatterEnd(VecScatter,Vec,Vec,InsertMode,ScatterMode);
351014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecScatterDestroy(VecScatter*);
352014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecScatterCopy(VecScatter,VecScatter *);
353014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecScatterView(VecScatter,PetscViewer);
354685405a1SBarry Smith PETSC_STATIC_INLINE PetscErrorCode VecScatterViewFromOptions(VecScatter A,PetscObject obj,const char name[]) {return PetscObjectViewFromOptions((PetscObject)A,obj,name);}
355014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecScatterRemap(VecScatter,PetscInt *,PetscInt*);
356014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecScatterGetMerged(VecScatter,PetscBool *);
3572195c698SBarry Smith 
358014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecGetArray4d(Vec,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscScalar****[]);
359014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecRestoreArray4d(Vec,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscScalar****[]);
360014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecGetArray3d(Vec,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscScalar***[]);
361014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecRestoreArray3d(Vec,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscScalar***[]);
362014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecGetArray2d(Vec,PetscInt,PetscInt,PetscInt,PetscInt,PetscScalar**[]);
363014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecRestoreArray2d(Vec,PetscInt,PetscInt,PetscInt,PetscInt,PetscScalar**[]);
364014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecGetArray1d(Vec,PetscInt,PetscInt,PetscScalar *[]);
365014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecRestoreArray1d(Vec,PetscInt,PetscInt,PetscScalar *[]);
366ab360428SBarry Smith 
3675edff71fSBarry Smith PETSC_EXTERN PetscErrorCode VecGetArray4dRead(Vec,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscScalar****[]);
3685edff71fSBarry Smith PETSC_EXTERN PetscErrorCode VecRestoreArray4dRead(Vec,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscScalar****[]);
3695edff71fSBarry Smith PETSC_EXTERN PetscErrorCode VecGetArray3dRead(Vec,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscScalar***[]);
3705edff71fSBarry Smith PETSC_EXTERN PetscErrorCode VecRestoreArray3dRead(Vec,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscScalar***[]);
3715edff71fSBarry Smith PETSC_EXTERN PetscErrorCode VecGetArray2dRead(Vec,PetscInt,PetscInt,PetscInt,PetscInt,PetscScalar**[]);
3725edff71fSBarry Smith PETSC_EXTERN PetscErrorCode VecRestoreArray2dRead(Vec,PetscInt,PetscInt,PetscInt,PetscInt,PetscScalar**[]);
3735edff71fSBarry Smith PETSC_EXTERN PetscErrorCode VecGetArray1dRead(Vec,PetscInt,PetscInt,PetscScalar *[]);
3745edff71fSBarry Smith PETSC_EXTERN PetscErrorCode VecRestoreArray1dRead(Vec,PetscInt,PetscInt,PetscScalar *[]);
3755edff71fSBarry Smith 
376014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecPlaceArray(Vec,const PetscScalar[]);
377014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecResetArray(Vec);
378014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecReplaceArray(Vec,const PetscScalar[]);
379014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecGetArrays(const Vec[],PetscInt,PetscScalar**[]);
380014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecRestoreArrays(const Vec[],PetscInt,PetscScalar**[]);
38184cb2905SBarry Smith 
382014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecView(Vec,PetscViewer);
383014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecEqual(Vec,Vec,PetscBool *);
384014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecLoad(Vec, PetscViewer);
3858ed539a5SBarry Smith 
386014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecGetSize(Vec,PetscInt*);
387014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecGetLocalSize(Vec,PetscInt*);
388014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecGetOwnershipRange(Vec,PetscInt*,PetscInt*);
389014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecGetOwnershipRanges(Vec,const PetscInt *[]);
3908ed539a5SBarry Smith 
391014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecSetLocalToGlobalMapping(Vec,ISLocalToGlobalMapping);
392014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecSetValuesLocal(Vec,PetscInt,const PetscInt[],const PetscScalar[],InsertMode);
39388b03592SBarry Smith 
39488b03592SBarry Smith /*MC
39588b03592SBarry Smith    VecSetValueLocal - Set a single entry into a vector using the local numbering
39688b03592SBarry Smith 
39788b03592SBarry Smith    Synopsis:
398aaa7dc30SBarry Smith    #include <petscvec.h>
3998122439eSJed Brown    PetscErrorCode VecSetValueLocal(Vec v,PetscInt row,PetscScalar value, InsertMode mode);
40088b03592SBarry Smith 
40188b03592SBarry Smith    Not Collective
40288b03592SBarry Smith 
40388b03592SBarry Smith    Input Parameters:
40488b03592SBarry Smith +  v - the vector
40588b03592SBarry Smith .  row - the row location of the entry
40688b03592SBarry Smith .  value - the value to insert
40788b03592SBarry Smith -  mode - either INSERT_VALUES or ADD_VALUES
40888b03592SBarry Smith 
40988b03592SBarry Smith    Notes:
41088b03592SBarry Smith    For efficiency one should use VecSetValues() and set several or
41188b03592SBarry Smith    many values simultaneously if possible.
41288b03592SBarry Smith 
41388b03592SBarry Smith    These values may be cached, so VecAssemblyBegin() and VecAssemblyEnd()
41488b03592SBarry Smith    MUST be called after all calls to VecSetValues() have been completed.
41588b03592SBarry Smith 
41688b03592SBarry Smith    VecSetValues() uses 0-based indices in Fortran as well as in C.
41788b03592SBarry Smith 
41888b03592SBarry Smith    Level: beginner
41988b03592SBarry Smith 
42088b03592SBarry Smith .seealso: VecSetValues(), VecAssemblyBegin(), VecAssemblyEnd(), VecSetValuesBlockedLocal(), VecSetValue()
42188b03592SBarry Smith M*/
42288b03592SBarry Smith PETSC_STATIC_INLINE PetscErrorCode VecSetValueLocal(Vec v,PetscInt i,PetscScalar va,InsertMode mode) {return VecSetValuesLocal(v,1,&i,&va,mode);}
42388b03592SBarry Smith 
424014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecSetValuesBlockedLocal(Vec,PetscInt,const PetscInt[],const PetscScalar[],InsertMode);
425014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecGetLocalToGlobalMapping(Vec,ISLocalToGlobalMapping*);
42690f02eecSBarry Smith 
427014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecDotBegin(Vec,Vec,PetscScalar *);
428014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecDotEnd(Vec,Vec,PetscScalar *);
429014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecTDotBegin(Vec,Vec,PetscScalar *);
430014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecTDotEnd(Vec,Vec,PetscScalar *);
431014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecNormBegin(Vec,NormType,PetscReal *);
432014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecNormEnd(Vec,NormType,PetscReal *);
433d3c178dbSBarry Smith 
434014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecMDotBegin(Vec,PetscInt,const Vec[],PetscScalar[]);
435014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecMDotEnd(Vec,PetscInt,const Vec[],PetscScalar[]);
436014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecMTDotBegin(Vec,PetscInt,const Vec[],PetscScalar[]);
437014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecMTDotEnd(Vec,PetscInt,const Vec[],PetscScalar[]);
438014dd563SJed Brown PETSC_EXTERN PetscErrorCode PetscCommSplitReductionBegin(MPI_Comm);
439a751f32aSSatish Balay 
440a751f32aSSatish Balay 
441bda0d2a0SJed Brown typedef enum {VEC_IGNORE_OFF_PROC_ENTRIES,VEC_IGNORE_NEGATIVE_INDICES,VEC_SUBSET_OFF_PROC_ENTRIES} VecOption;
442014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecSetOption(Vec,VecOption,PetscBool );
44390f02eecSBarry Smith 
4445c0c2446SJed Brown PETSC_EXTERN PetscErrorCode VecGetArray(Vec,PetscScalar**);
4455c0c2446SJed Brown PETSC_EXTERN PetscErrorCode VecGetArrayRead(Vec,const PetscScalar**);
4465c0c2446SJed Brown PETSC_EXTERN PetscErrorCode VecRestoreArray(Vec,PetscScalar**);
4475c0c2446SJed Brown PETSC_EXTERN PetscErrorCode VecRestoreArrayRead(Vec,const PetscScalar**);
448046dc149SDominic Meiser PETSC_EXTERN PetscErrorCode VecGetLocalVector(Vec,Vec);
449046dc149SDominic Meiser PETSC_EXTERN PetscErrorCode VecRestoreLocalVector(Vec,Vec);
450046dc149SDominic Meiser PETSC_EXTERN PetscErrorCode VecGetLocalVectorRead(Vec,Vec);
451046dc149SDominic Meiser PETSC_EXTERN PetscErrorCode VecRestoreLocalVectorRead(Vec,Vec);
4529521ec69SBarry Smith 
4539521ec69SBarry Smith /*@C
4549521ec69SBarry Smith    VecGetArrayPair - Accesses a pair of pointers for two vectors that may be common. When not common the first is read only
4559521ec69SBarry Smith 
4569521ec69SBarry Smith    Logically Collective on Vec
4579521ec69SBarry Smith 
458f5f57ec0SBarry Smith    Input Parameters:
4599521ec69SBarry Smith +  x - the vector
4609521ec69SBarry Smith -  y - the second vector
4619521ec69SBarry Smith 
462f5f57ec0SBarry Smith    Output Parameters:
4639521ec69SBarry Smith +  xv - location to put pointer to the first array
4649521ec69SBarry Smith -  yv - location to put pointer to the second array
4659521ec69SBarry Smith 
4669521ec69SBarry Smith    Level: developer
4679521ec69SBarry Smith 
468f5f57ec0SBarry Smith    Not available from Fortran
469f5f57ec0SBarry Smith 
4709521ec69SBarry Smith .seealso: VecGetArray(), VecGetArrayRead(), VecRestoreArrayPair()
4719521ec69SBarry Smith 
4729521ec69SBarry Smith @*/
473d9ca1df4SBarry Smith PETSC_STATIC_INLINE PetscErrorCode VecGetArrayPair(Vec x,Vec y,PetscScalar **xv,PetscScalar **yv)
474d9ca1df4SBarry Smith {
475d9ca1df4SBarry Smith   PetscErrorCode ierr;
476d9ca1df4SBarry Smith 
477d9ca1df4SBarry Smith   PetscFunctionBegin;
478d9ca1df4SBarry Smith   ierr = VecGetArray(y,yv);CHKERRQ(ierr);
479d9ca1df4SBarry Smith   if (x != y) {
480d9ca1df4SBarry Smith     ierr = VecGetArrayRead(x,(const PetscScalar **)xv);CHKERRQ(ierr);
481d9ca1df4SBarry Smith   } else {
482d9ca1df4SBarry Smith     *xv = *yv;
483d9ca1df4SBarry Smith   }
484d9ca1df4SBarry Smith   PetscFunctionReturn(0);
485d9ca1df4SBarry Smith }
4869521ec69SBarry Smith 
4879521ec69SBarry Smith /*@C
4889521ec69SBarry Smith    VecRestoreArrayPair - Returns a pair of pointers for two vectors that may be common. When not common the first is read only
4899521ec69SBarry Smith 
4909521ec69SBarry Smith    Logically Collective on Vec
4919521ec69SBarry Smith 
492f5f57ec0SBarry Smith    Input Parameters:
4939521ec69SBarry Smith +  x - the vector
4949521ec69SBarry Smith -  y - the second vector
4959521ec69SBarry Smith 
496f5f57ec0SBarry Smith    Output Parameters:
4979521ec69SBarry Smith +  xv - location to put pointer to the first array
4989521ec69SBarry Smith -  yv - location to put pointer to the second array
4999521ec69SBarry Smith 
5009521ec69SBarry Smith    Level: developer
5019521ec69SBarry Smith 
502f5f57ec0SBarry Smith    Not available from Fortran
503f5f57ec0SBarry Smith 
5049521ec69SBarry Smith .seealso: VecGetArray(), VecGetArrayRead(), VecGetArrayPair()
5059521ec69SBarry Smith 
5069521ec69SBarry Smith @*/
507d9ca1df4SBarry Smith PETSC_STATIC_INLINE PetscErrorCode VecRestoreArrayPair(Vec x,Vec y,PetscScalar **xv,PetscScalar **yv)
508d9ca1df4SBarry Smith {
509d9ca1df4SBarry Smith   PetscErrorCode ierr;
510d9ca1df4SBarry Smith 
511d9ca1df4SBarry Smith   PetscFunctionBegin;
512d9ca1df4SBarry Smith   ierr = VecRestoreArray(y,yv);CHKERRQ(ierr);
513d9ca1df4SBarry Smith   if (x != y) {
514d9ca1df4SBarry Smith     ierr = VecRestoreArrayRead(x,(const PetscScalar **)xv);CHKERRQ(ierr);
515d9ca1df4SBarry Smith   }
516d9ca1df4SBarry Smith   PetscFunctionReturn(0);
517d9ca1df4SBarry Smith }
518d9ca1df4SBarry Smith 
519d9ca1df4SBarry Smith #if defined(PETSC_USE_DEBUG)
520d9ca1df4SBarry Smith PETSC_EXTERN PetscErrorCode VecLockGet(Vec,PetscInt*);
521d9ca1df4SBarry Smith PETSC_EXTERN PetscErrorCode VecLockPush(Vec);
522d9ca1df4SBarry Smith PETSC_EXTERN PetscErrorCode VecLockPop(Vec);
523d9ca1df4SBarry Smith #define VecLocked(x,arg) do {PetscInt _st; PetscErrorCode __ierr = VecLockGet(x,&_st); CHKERRQ(__ierr); if (_st > 0) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONGSTATE," Vec is locked read only, argument # %d",arg);} while (0)
524d9ca1df4SBarry Smith #else
525e5a281bcSBarry Smith #define VecLockGet(x,arg)     *(arg) = 0
526e5a281bcSBarry Smith #define VecLockPush(x)        0
527e5a281bcSBarry Smith #define VecLockPop(x)         0
528e5a281bcSBarry Smith #define VecLocked(x,arg)
529d9ca1df4SBarry Smith #endif
530e1fa1e0fSSatish Balay 
53162796dfbSBarry Smith PETSC_EXTERN PetscErrorCode VecValidValues(Vec,PetscInt,PetscBool);
532f7ecc322SBarry Smith 
53315091d37SBarry Smith /*
53415091d37SBarry Smith     These numbers need to match the entries in
5353c94ec11SBarry Smith   the function table in vecimpl.h
53615091d37SBarry Smith */
53792d03f5aSMatthew G. Knepley typedef enum { VECOP_DUPLICATE = 0, VECOP_VIEW = 33, VECOP_LOAD = 41, VECOP_VIEWNATIVE = 68, VECOP_LOADNATIVE = 69 } VecOperation;
538014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecSetOperation(Vec,VecOperation,void(*)(void));
539b19c1e4cSBarry Smith 
540e182c471SBarry Smith /*
541e182c471SBarry Smith      Routines for dealing with ghosted vectors:
542e182c471SBarry Smith   vectors with ghost elements at the end of the array.
543e182c471SBarry Smith */
544014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecMPISetGhost(Vec,PetscInt,const PetscInt[]);
545014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecCreateGhost(MPI_Comm,PetscInt,PetscInt,PetscInt,const PetscInt[],Vec*);
546014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecCreateGhostWithArray(MPI_Comm,PetscInt,PetscInt,PetscInt,const PetscInt[],const PetscScalar[],Vec*);
547014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecCreateGhostBlock(MPI_Comm,PetscInt,PetscInt,PetscInt,PetscInt,const PetscInt[],Vec*);
548014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecCreateGhostBlockWithArray(MPI_Comm,PetscInt,PetscInt,PetscInt,PetscInt,const PetscInt[],const PetscScalar[],Vec*);
549014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecGhostGetLocalForm(Vec,Vec*);
550014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecGhostRestoreLocalForm(Vec,Vec*);
5513efe6655SBarry Smith PETSC_EXTERN PetscErrorCode VecGhostIsLocalForm(Vec,Vec,PetscBool*);
552014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecGhostUpdateBegin(Vec,InsertMode,ScatterMode);
553014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecGhostUpdateEnd(Vec,InsertMode,ScatterMode);
554e182c471SBarry Smith 
555014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecConjugate(Vec);
55634233285SBarry Smith 
557014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecScatterCreateToAll(Vec,VecScatter*,Vec*);
558014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecScatterCreateToZero(Vec,VecScatter*,Vec*);
559bba1ac68SSatish Balay 
5604473680cSBarry Smith PETSC_EXTERN PetscErrorCode ISComplementVec(IS,Vec,IS*);
5614473680cSBarry Smith PETSC_EXTERN PetscErrorCode VecPow(Vec, PetscScalar);
5624473680cSBarry Smith PETSC_EXTERN PetscErrorCode VecMedian(Vec, Vec, Vec, Vec);
563ce902467SBarry Smith PETSC_EXTERN PetscErrorCode VecWhichInactive(Vec, Vec, Vec, Vec, PetscBool, IS *);
5644473680cSBarry Smith PETSC_EXTERN PetscErrorCode VecWhichBetween(Vec, Vec, Vec, IS *);
5654473680cSBarry Smith PETSC_EXTERN PetscErrorCode VecWhichBetweenOrEqual(Vec, Vec, Vec, IS *);
5664473680cSBarry Smith PETSC_EXTERN PetscErrorCode VecWhichGreaterThan(Vec, Vec, IS * );
5674473680cSBarry Smith PETSC_EXTERN PetscErrorCode VecWhichLessThan(Vec, Vec, IS *);
5684473680cSBarry Smith PETSC_EXTERN PetscErrorCode VecWhichEqual(Vec, Vec, IS *);
5694473680cSBarry Smith PETSC_EXTERN PetscErrorCode VecISAXPY(Vec, IS, PetscScalar,Vec);
5708883cd90SMatthew G. Knepley PETSC_EXTERN PetscErrorCode VecISCopy(Vec, IS, ScatterMode, Vec);
5714473680cSBarry Smith PETSC_EXTERN PetscErrorCode VecISSet(Vec,IS, PetscScalar);
5724473680cSBarry Smith PETSC_EXTERN PetscErrorCode VecBoundGradientProjection(Vec, Vec, Vec, Vec, Vec);
5734473680cSBarry Smith PETSC_EXTERN PetscErrorCode VecStepBoundInfo(Vec,Vec,Vec,Vec,PetscReal*, PetscReal*,PetscReal*);
5744473680cSBarry Smith PETSC_EXTERN PetscErrorCode VecStepMax(Vec, Vec, PetscReal *);
5754473680cSBarry Smith PETSC_EXTERN PetscErrorCode VecStepMaxBounded(Vec,Vec,Vec,Vec,PetscReal*);
5764473680cSBarry Smith 
577014dd563SJed Brown PETSC_EXTERN PetscErrorCode PetscViewerMathematicaGetVector(PetscViewer, Vec);
578014dd563SJed Brown PETSC_EXTERN PetscErrorCode PetscViewerMathematicaPutVector(PetscViewer, Vec);
5797dbadf16SMatthew Knepley 
580d59c15a7SBarry Smith /*S
581d59c15a7SBarry Smith      Vecs - Collection of vectors where the data for the vectors is stored in
582759e7b9cSHong Zhang             one contiguous memory
583d59c15a7SBarry Smith 
584d59c15a7SBarry Smith    Level: advanced
585d59c15a7SBarry Smith 
586d59c15a7SBarry Smith    Notes:
587d59c15a7SBarry Smith     Temporary construct for handling multiply right hand side solves
588d59c15a7SBarry Smith 
589d59c15a7SBarry Smith     This is faked by storing a single vector that has enough array space for
590d59c15a7SBarry Smith     n vectors
591d59c15a7SBarry Smith 
592d59c15a7SBarry Smith   Concepts: parallel decomposition
593d59c15a7SBarry Smith 
594d59c15a7SBarry Smith S*/
59595fbd943SSatish Balay         struct _n_Vecs  {PetscInt n; Vec v;};
59695fbd943SSatish Balay typedef struct _n_Vecs* Vecs;
597e1317eeeSBarry Smith PETSC_EXTERN PetscErrorCode VecsDestroy(Vecs);
598e1317eeeSBarry Smith PETSC_EXTERN PetscErrorCode VecsCreateSeq(MPI_Comm,PetscInt,PetscInt,Vecs*);
599e1317eeeSBarry Smith PETSC_EXTERN PetscErrorCode VecsCreateSeqWithArray(MPI_Comm,PetscInt,PetscInt,PetscScalar*,Vecs*);
600e1317eeeSBarry Smith PETSC_EXTERN PetscErrorCode VecsDuplicate(Vecs,Vecs*);
601e9fa29b7SSatish Balay 
6028154be41SBarry Smith #if defined(PETSC_HAVE_CUSP)
603a5891931SBarry Smith typedef struct _p_PetscCUSPIndices* PetscCUSPIndices;
60425ec7418SKarl Rupp typedef struct _p_VecScatterCUSPIndices_StoS* VecScatterCUSPIndices_StoS;
60525ec7418SKarl Rupp typedef struct _p_VecScatterCUSPIndices_PtoP* VecScatterCUSPIndices_PtoP;
606014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecCUSPCopyToGPUSome_Public(Vec,PetscCUSPIndices);
607014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecCUSPCopyFromGPUSome_Public(Vec,PetscCUSPIndices);
608014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecScatterInitializeForGPU(VecScatter,Vec,ScatterMode);
609014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecScatterFinalizeForGPU(VecScatter);
610014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecCreateSeqCUSP(MPI_Comm,PetscInt,Vec*);
611014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecCreateMPICUSP(MPI_Comm,PetscInt,PetscInt,Vec*);
61282f73ecaSAlejandro Lamas Daviña #elif defined(PETSC_HAVE_VIENNACL)
613b17c682bSKarl Rupp typedef struct _p_PetscViennaCLIndices* PetscViennaCLIndices;
614b17c682bSKarl Rupp PETSC_EXTERN PetscErrorCode PetscViennaCLIndicesCreate(PetscInt, PetscInt*,PetscInt, PetscInt*,PetscViennaCLIndices*);
615b17c682bSKarl Rupp PETSC_EXTERN PetscErrorCode PetscViennaCLIndicesDestroy(PetscViennaCLIndices*);
616b17c682bSKarl Rupp PETSC_EXTERN PetscErrorCode VecViennaCLCopyToGPUSome_Public(Vec,PetscViennaCLIndices);
617b17c682bSKarl Rupp PETSC_EXTERN PetscErrorCode VecViennaCLCopyFromGPUSome_Public(Vec,PetscViennaCLIndices);
618b17c682bSKarl Rupp PETSC_EXTERN PetscErrorCode VecCreateSeqViennaCL(MPI_Comm,PetscInt,Vec*);
619b17c682bSKarl Rupp PETSC_EXTERN PetscErrorCode VecCreateMPIViennaCL(MPI_Comm,PetscInt,PetscInt,Vec*);
62082f73ecaSAlejandro Lamas Daviña #elif defined(PETSC_HAVE_VECCUDA)
62182f73ecaSAlejandro Lamas Daviña typedef struct _p_PetscCUDAIndices* PetscCUDAIndices;
62282f73ecaSAlejandro Lamas Daviña typedef struct _p_VecScatterCUDAIndices_StoS* VecScatterCUDAIndices_StoS;
62382f73ecaSAlejandro Lamas Daviña typedef struct _p_VecScatterCUDAIndices_PtoP* VecScatterCUDAIndices_PtoP;
62482f73ecaSAlejandro Lamas Daviña PETSC_EXTERN PetscErrorCode VecCUDACopyToGPUSome_Public(Vec,PetscCUDAIndices);
62582f73ecaSAlejandro Lamas Daviña PETSC_EXTERN PetscErrorCode VecCUDACopyFromGPUSome_Public(Vec,PetscCUDAIndices);
62682f73ecaSAlejandro Lamas Daviña PETSC_EXTERN PetscErrorCode VecScatterInitializeForGPU(VecScatter,Vec,ScatterMode);
62782f73ecaSAlejandro Lamas Daviña PETSC_EXTERN PetscErrorCode VecScatterFinalizeForGPU(VecScatter);
62882f73ecaSAlejandro Lamas Daviña PETSC_EXTERN PetscErrorCode VecCreateSeqCUDA(MPI_Comm,PetscInt,Vec*);
62976d6722aSAlejandro Lamas Daviña PETSC_EXTERN PetscErrorCode VecCreateSeqCUDAWithArray(MPI_Comm,PetscInt,PetscInt,const PetscScalar*,Vec*);
63082f73ecaSAlejandro Lamas Daviña PETSC_EXTERN PetscErrorCode VecCreateMPICUDA(MPI_Comm,PetscInt,PetscInt,Vec*);
63176d6722aSAlejandro Lamas Daviña PETSC_EXTERN PetscErrorCode VecCreateMPICUDAWithArray(MPI_Comm,PetscInt,PetscInt,PetscInt,const PetscScalar*,Vec*);
632b17c682bSKarl Rupp #endif
633b17c682bSKarl Rupp 
634014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecNestGetSubVecs(Vec,PetscInt*,Vec**);
635014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecNestGetSubVec(Vec,PetscInt,Vec*);
636014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecNestSetSubVecs(Vec,PetscInt,PetscInt*,Vec*);
637014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecNestSetSubVec(Vec,PetscInt,Vec);
638014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecCreateNest(MPI_Comm,PetscInt,IS*,Vec*,Vec*);
639014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecNestGetSize(Vec,PetscInt*);
64045b63f25SDmitry Karpeev 
641c5929fdfSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsGetVec(PetscOptions,const char[],const char[],Vec,PetscBool*);
6424325cce7SMatthew G Knepley PETSC_EXTERN PetscErrorCode VecChop(Vec,PetscReal);
643ab352700SBarry Smith 
644077aedafSJed Brown PETSC_EXTERN PetscErrorCode VecGetLayout(Vec,PetscLayout*);
645077aedafSJed Brown PETSC_EXTERN PetscErrorCode VecSetLayout(Vec,PetscLayout);
6469a6d0b0bSJed Brown 
6479a6d0b0bSJed Brown PETSC_EXTERN PetscErrorCode PetscSectionVecView(PetscSection, Vec, PetscViewer);
6489a6d0b0bSJed Brown PETSC_EXTERN PetscErrorCode VecGetValuesSection(Vec, PetscSection, PetscInt, PetscScalar **);
6499a6d0b0bSJed Brown PETSC_EXTERN PetscErrorCode VecSetValuesSection(Vec, PetscSection, PetscInt, PetscScalar [], InsertMode);
65022d96a0cSMatthew G. Knepley PETSC_EXTERN PetscErrorCode PetscSectionVecNorm(PetscSection, PetscSection, Vec, NormType, PetscReal []);
6519a6d0b0bSJed Brown 
652ad59f098SAta Mesgarnejad PETSC_EXTERN PetscErrorCode PetscSFCreateFromZero(MPI_Comm,Vec,PetscSF*);
653ad59f098SAta Mesgarnejad 
6545543aaa0SToby Isaac /*S
6555543aaa0SToby Isaac   VecTagger - Object used to manage the tagging of a subset of indices based on the values of a vector.  The
6565543aaa0SToby Isaac               motivating application is the selection of cells for refinement or coarsening based on vector containing
6575543aaa0SToby Isaac               the values in an error indicator metric.
6585543aaa0SToby Isaac 
6595543aaa0SToby Isaac   Level: advanced
6605543aaa0SToby Isaac S*/
66161bbf837SToby Isaac typedef struct _p_VecTagger *VecTagger;
6625543aaa0SToby Isaac 
6635543aaa0SToby Isaac /*J
6645543aaa0SToby Isaac   VecTaggerType - String with the name of a VecTagger type
6655543aaa0SToby Isaac 
6665543aaa0SToby Isaac   Level: advanced
6675543aaa0SToby Isaac J*/
6685543aaa0SToby Isaac typedef const char* VecTaggerType;
6694178c1b7SToby Isaac /* tag where the vector values are in a box of explicitly defined values */
670cab77d58SToby Isaac #define VECTAGGERABSOLUTE   "absolute"
6714178c1b7SToby Isaac /* tag where the vector values are in a box of values relative to the set of all values in the vector */
6725543aaa0SToby Isaac #define VECTAGGERRELATIVE   "relative"
6735543aaa0SToby Isaac /* tag where the vector values are in a relative range of the *cumulative distribution* of values in the vector */
6741d1d0dd8SToby Isaac #define VECTAGGERCDF        "cdf"
6755543aaa0SToby Isaac /* tag a vector as the union of other tags */
6765543aaa0SToby Isaac #define VECTAGGEROR         "or"
6775543aaa0SToby Isaac /* tag a vector as the intersection of other tags */
6785543aaa0SToby Isaac #define VECTAGGERAND        "and"
6795543aaa0SToby Isaac 
6805543aaa0SToby Isaac PETSC_EXTERN PetscClassId VEC_TAGGER_CLASSID;
68161bbf837SToby Isaac PETSC_EXTERN PetscFunctionList VecTaggerList;
68261bbf837SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerRegister(const char[],PetscErrorCode (*) (VecTagger));
6835543aaa0SToby Isaac 
6845543aaa0SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerCreate(MPI_Comm,VecTagger *);
685cab77d58SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerSetBlockSize(VecTagger,PetscInt);
686cab77d58SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerGetBlockSize(VecTagger,PetscInt*);
6875543aaa0SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerSetType(VecTagger,VecTaggerType);
6885543aaa0SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerGetType(VecTagger,VecTaggerType *);
6895543aaa0SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerSetInvert(VecTagger,PetscBool);
6905543aaa0SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerGetInvert(VecTagger,PetscBool*);
6915543aaa0SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerSetFromOptions(VecTagger);
6925543aaa0SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerSetUp(VecTagger);
6935543aaa0SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerView(VecTagger,PetscViewer);
6945543aaa0SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerComputeIS(VecTagger,Vec,IS *);
6955543aaa0SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerDestroy(VecTagger *);
6965543aaa0SToby Isaac 
6974178c1b7SToby Isaac /*S
6984178c1b7SToby Isaac    VecTaggerBox - A box range used to tag values.  For real scalars, this is just a closed interval; for complex scalars, the box is the closed region in the complex plane
6994178c1b7SToby Isaac    such that real(min) <= real(z) <= real(max) and imag(min) <= imag(z) <= imag(max).  INF is an acceptable endpoint.
70061bbf837SToby Isaac 
7014178c1b7SToby Isaac    Level: beginner
70261bbf837SToby Isaac 
7034178c1b7SToby Isaac .seealso: VecTaggerComputeIntervals()
7044178c1b7SToby Isaac S*/
7054178c1b7SToby Isaac typedef struct {
7064178c1b7SToby Isaac   PetscScalar min;
7074178c1b7SToby Isaac   PetscScalar max;
7084178c1b7SToby Isaac } VecTaggerBox;
7094178c1b7SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerComputeBoxes(VecTagger,Vec,PetscInt *,VecTaggerBox **);
7104178c1b7SToby Isaac 
7114178c1b7SToby Isaac 
7124178c1b7SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerAbsoluteSetBox(VecTagger,VecTaggerBox *);
7134178c1b7SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerAbsoluteGetBox(VecTagger,const VecTaggerBox **);
7144178c1b7SToby Isaac 
7154178c1b7SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerRelativeSetBox(VecTagger,VecTaggerBox *);
7164178c1b7SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerRelativeGetBox(VecTagger,const VecTaggerBox **);
7174178c1b7SToby Isaac 
7184178c1b7SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerCDFSetBox(VecTagger,VecTaggerBox *);
7194178c1b7SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerCDFGetBox(VecTagger,const VecTaggerBox **);
7201d1d0dd8SToby Isaac 
7211d1d0dd8SToby Isaac /*E
7221d1d0dd8SToby Isaac   VecTaggerCDFMethod - Determines what method is used to compute absolute values from cumulative distribution values (e.g., what value is the preimage of .95 in the cdf).  Relevant only in parallel: in serial it is directly computed.
7231d1d0dd8SToby Isaac 
7241d1d0dd8SToby Isaac   Level: advanced
7251d1d0dd8SToby Isaac .seealso: VecTaggerCDFSetMethod(), VecTaggerCDFMethods
7261d1d0dd8SToby Isaac E*/
7271d1d0dd8SToby Isaac typedef enum {VECTAGGER_CDF_GATHER,VECTAGGER_CDF_ITERATIVE,VECTAGGER_CDF_NUM_METHODS} VecTaggerCDFMethod;
7281d1d0dd8SToby Isaac PETSC_EXTERN const char *const VecTaggerCDFMethods[];
7291d1d0dd8SToby Isaac 
7301d1d0dd8SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerCDFSetMethod(VecTagger,VecTaggerCDFMethod);
7311d1d0dd8SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerCDFGetMethod(VecTagger,VecTaggerCDFMethod*);
7321d1d0dd8SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerCDFIterativeSetTolerances(VecTagger,PetscInt,PetscReal,PetscReal);
7331d1d0dd8SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerCDFIterativeGetTolerances(VecTagger,PetscInt*,PetscReal*,PetscReal*);
73461bbf837SToby Isaac 
735497ee004SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerOrSetSubs(VecTagger,PetscInt,VecTagger*,PetscCopyMode);
736497ee004SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerOrGetSubs(VecTagger,PetscInt*,VecTagger**);
73761bbf837SToby Isaac 
738497ee004SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerAndSetSubs(VecTagger,PetscInt,VecTagger*,PetscCopyMode);
739497ee004SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerAndGetSubs(VecTagger,PetscInt*,VecTagger**);
74061bbf837SToby Isaac 
74161bbf837SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerInitializePackage(void);
74261bbf837SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerFinalizePackage(void);
74361bbf837SToby Isaac 
7442eac72dbSBarry Smith #endif
7452b82984cSSatish Balay 
746