xref: /petsc/include/petscvec.h (revision 499d51b4d59ea4bdd9dd3c6e8278adf0c93b4351)
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"
100a835dfdSSatish Balay #include "petscsys.h"
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
3709321671SBarry Smith     VecType - String with the name of a PETSc vector or the creation function
3809321671SBarry Smith        with an optional dynamic library name, for example
3909321671SBarry Smith        http://www.mcs.anl.gov/petsc/lib.a:myveccreate()
4009321671SBarry Smith 
4109321671SBarry Smith    Level: beginner
4209321671SBarry Smith 
4309321671SBarry Smith .seealso: VecSetType(), Vec
4409321671SBarry Smith E*/
450676abe4SMatthew Knepley #define VECSEQ         "seq"
460676abe4SMatthew Knepley #define VECMPI         "mpi"
470676abe4SMatthew Knepley #define VECFETI        "feti"
480676abe4SMatthew Knepley #define VECSHARED      "shared"
49f69a0ea3SMatthew Knepley #define VecType const char*
502eac72dbSBarry Smith 
51fd487807SMatthew Knepley /* Logging support */
52552e946dSBarry Smith #define    VEC_FILE_COOKIE 1211214
530c735eedSKris Buschelman extern PETSCVEC_DLLEXPORT PetscCookie VEC_COOKIE;
540c735eedSKris Buschelman extern PETSCVEC_DLLEXPORT PetscCookie VEC_SCATTER_COOKIE;
558ba1e511SMatthew Knepley 
560c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecInitializePackage(char *);
57fd487807SMatthew Knepley 
580c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecCreate(MPI_Comm,Vec*);
59045ff3e0SBarry Smith PetscPolymorphicSubroutine(VecCreate,(Vec *x),(PETSC_COMM_SELF,x))
600c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecCreateSeq(MPI_Comm,PetscInt,Vec*);
61045ff3e0SBarry Smith PetscPolymorphicSubroutine(VecCreateSeq,(PetscInt n,Vec *x),(PETSC_COMM_SELF,n,x))
620c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecCreateMPI(MPI_Comm,PetscInt,PetscInt,Vec*);
63045ff3e0SBarry Smith PetscPolymorphicSubroutine(VecCreateMPI,(PetscInt n,PetscInt N,Vec *x),(PETSC_COMM_WORLD,n,N,x))
640c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecCreateSeqWithArray(MPI_Comm,PetscInt,const PetscScalar[],Vec*);
65045ff3e0SBarry Smith PetscPolymorphicSubroutine(VecCreateSeqWithArray,(PetscInt n,PetscScalar s[],Vec *x),(PETSC_COMM_SELF,n,s,x))
660c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecCreateMPIWithArray(MPI_Comm,PetscInt,PetscInt,const PetscScalar[],Vec*);
67045ff3e0SBarry Smith PetscPolymorphicSubroutine(VecCreateMPIWithArray,(PetscInt n,PetscInt N,PetscScalar s[],Vec *x),(PETSC_COMM_WORLD,n,N,s,x))
680c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecCreateShared(MPI_Comm,PetscInt,PetscInt,Vec*);
690c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSetFromOptions(Vec);
700c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecPrintHelp(Vec);
71f69a0ea3SMatthew Knepley EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSetUp(Vec);
720c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecDestroy(Vec);
73f1e08e49SBarry Smith EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecZeroEntries(Vec);
74f69a0ea3SMatthew Knepley EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSetOptionsPrefix(Vec,const char[]);
75f69a0ea3SMatthew Knepley EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecAppendOptionsPrefix(Vec,const char[]);
76f69a0ea3SMatthew Knepley EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGetOptionsPrefix(Vec,const char*[]);
77f69a0ea3SMatthew Knepley 
780c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSetSizes(Vec,PetscInt,PetscInt);
79fd487807SMatthew Knepley 
800c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecDot(Vec,Vec,PetscScalar*);
81fcd5dd21SSatish Balay PetscPolymorphicFunction(VecDot,(Vec x,Vec y),(x,y,&s),PetscScalar,s)
820c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecTDot(Vec,Vec,PetscScalar*);
83fcd5dd21SSatish Balay PetscPolymorphicFunction(VecTDot,(Vec x,Vec y),(x,y,&s),PetscScalar,s)
848dbd3d1dSSatish Balay EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecMDot(Vec,PetscInt,const Vec[],PetscScalar*);
858dbd3d1dSSatish Balay EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecMTDot(Vec,PetscInt,const Vec[],PetscScalar*);
86cddf8d76SBarry Smith 
8709321671SBarry Smith /*E
8809321671SBarry Smith     NormType - determines what type of norm to compute
8909321671SBarry Smith 
9009321671SBarry Smith     Level: beginner
9109321671SBarry Smith 
9209321671SBarry Smith .seealso: VecNorm(), VecNormBegin(), VecNormEnd(), MatNorm()
9309321671SBarry Smith E*/
949dcbbd2bSBarry Smith typedef enum {NORM_1=0,NORM_2=1,NORM_FROBENIUS=2,NORM_INFINITY=3,NORM_1_AND_2=4} NormType;
959dcbbd2bSBarry Smith extern const char *NormTypes[];
96cddf8d76SBarry Smith #define NORM_MAX NORM_INFINITY
9709321671SBarry Smith 
989b250c83SBarry Smith /*MC
999b250c83SBarry Smith      NORM_1 - the one norm, ||v|| = sum_i | v_i |. ||A|| = max_j || v_*j ||, maximum column sum
1009b250c83SBarry Smith 
1019b250c83SBarry Smith    Level: beginner
1029b250c83SBarry Smith 
1039b250c83SBarry Smith .seealso:  NormType, MatNorm(), VecNorm(), VecNormBegin(), VecNormEnd(), NORM_2, NORM_FROBENIUS,
1049b250c83SBarry Smith            NORM_INFINITY, NORM_1_AND_2
1059b250c83SBarry Smith 
1069b250c83SBarry Smith M*/
1079b250c83SBarry Smith 
1089b250c83SBarry Smith /*MC
1099b250c83SBarry Smith      NORM_2 - the two norm, ||v|| = sqrt(sum_i (v_i)^2) (vectors only)
1109b250c83SBarry Smith 
1119b250c83SBarry Smith    Level: beginner
1129b250c83SBarry Smith 
1139b250c83SBarry Smith .seealso:  NormType, MatNorm(), VecNorm(), VecNormBegin(), VecNormEnd(), NORM_1, NORM_FROBENIUS,
1149b250c83SBarry Smith            NORM_INFINITY, NORM_1_AND_2
1159b250c83SBarry Smith 
1169b250c83SBarry Smith M*/
1179b250c83SBarry Smith 
1189b250c83SBarry Smith /*MC
1199b250c83SBarry Smith      NORM_FROBENIUS - ||A|| = sqrt(sum_ij (A_ij)^2), same as NORM_2 for vectors
1209b250c83SBarry Smith 
1219b250c83SBarry Smith    Level: beginner
1229b250c83SBarry Smith 
1239b250c83SBarry Smith .seealso:  NormType, MatNorm(), VecNorm(), VecNormBegin(), VecNormEnd(), NORM_1, NORM_2,
1249b250c83SBarry Smith            NORM_INFINITY, NORM_1_AND_2
1259b250c83SBarry Smith 
1269b250c83SBarry Smith M*/
1279b250c83SBarry Smith 
1289b250c83SBarry Smith /*MC
1299b250c83SBarry Smith      NORM_INFINITY - ||v|| = max_i |v_i|. ||A|| = max_i || v_i* ||, maximum row sum
1309b250c83SBarry Smith 
1319b250c83SBarry Smith    Level: beginner
1329b250c83SBarry Smith 
1339b250c83SBarry Smith .seealso:  NormType, MatNorm(), VecNorm(), VecNormBegin(), VecNormEnd(), NORM_1, NORM_2,
1349b250c83SBarry Smith            NORM_FROBINIUS, NORM_1_AND_2
1359b250c83SBarry Smith 
1369b250c83SBarry Smith M*/
1379b250c83SBarry Smith 
1389b250c83SBarry Smith /*MC
1399b250c83SBarry Smith      NORM_1_AND_2 - computes both the 1 and 2 norm of a vector
1409b250c83SBarry Smith 
1419b250c83SBarry Smith    Level: beginner
1429b250c83SBarry Smith 
1439b250c83SBarry Smith .seealso:  NormType, MatNorm(), VecNorm(), VecNormBegin(), VecNormEnd(), NORM_1, NORM_2,
1449b250c83SBarry Smith            NORM_FROBINIUS, NORM_INFINITY
1459b250c83SBarry Smith 
1469b250c83SBarry Smith M*/
1479b250c83SBarry Smith 
1489b250c83SBarry Smith /*MC
1499b250c83SBarry Smith      NORM_MAX - see NORM_INFINITY
1509b250c83SBarry Smith 
151d41222bbSBarry Smith    Level: beginner
152d41222bbSBarry Smith 
1539b250c83SBarry Smith M*/
1549b250c83SBarry Smith 
1550c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecNorm(Vec,NormType,PetscReal *);
156045ff3e0SBarry Smith PetscPolymorphicSubroutine(VecNorm,(Vec x,PetscReal *r),(x,NORM_2,r))
157c714d2d0SBarry Smith PetscPolymorphicFunction(VecNorm,(Vec x,NormType t),(x,t,&r),PetscReal,r)
158c714d2d0SBarry Smith PetscPolymorphicFunction(VecNorm,(Vec x),(x,NORM_2,&r),PetscReal,r)
1590c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecNormalize(Vec,PetscReal *);
1600c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSum(Vec,PetscScalar*);
1610c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecMax(Vec,PetscInt*,PetscReal *);
162045ff3e0SBarry Smith PetscPolymorphicSubroutine(VecMax,(Vec x,PetscReal *r),(x,PETSC_NULL,r))
1630c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecMin(Vec,PetscInt*,PetscReal *);
164045ff3e0SBarry Smith PetscPolymorphicSubroutine(VecMin,(Vec x,PetscReal *r),(x,PETSC_NULL,r))
1652dcb1b2aSMatthew Knepley EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecScale(Vec v,PetscScalar a);
1660c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecCopy(Vec,Vec);
167abb0e124SMatthew Knepley EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSetRandom(Vec,PetscRandom);
1682dcb1b2aSMatthew Knepley EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSet(Vec,PetscScalar);
1690c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSwap(Vec,Vec);
1702dcb1b2aSMatthew Knepley EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecAXPY(Vec,PetscScalar,Vec);
1712dcb1b2aSMatthew Knepley EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecAXPBY(Vec,PetscScalar,PetscScalar,Vec);
1722dcb1b2aSMatthew Knepley EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecMAXPY(Vec,PetscInt,const PetscScalar[],Vec*);
1732dcb1b2aSMatthew Knepley EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecAYPX(Vec,PetscScalar,Vec);
1742dcb1b2aSMatthew Knepley EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecWAXPY(Vec,PetscScalar,Vec,Vec);
1750c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecPointwiseMax(Vec,Vec,Vec);
1760190745aSSatish Balay PetscPolymorphicSubroutine(VecPointwiseMax,(Vec x,Vec y),(x,y,y))
1770c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecPointwiseMaxAbs(Vec,Vec,Vec);
1780190745aSSatish Balay PetscPolymorphicSubroutine(VecPointwiseMaxAbs,(Vec x,Vec y),(x,y,y))
1790c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecPointwiseMin(Vec,Vec,Vec);
1800190745aSSatish Balay PetscPolymorphicSubroutine(VecPointwiseMin,(Vec x,Vec y),(x,y,y))
1810c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecPointwiseMult(Vec,Vec,Vec);
1820190745aSSatish Balay PetscPolymorphicSubroutine(VecPointwiseMult,(Vec x,Vec y),(x,y,y))
1830c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecPointwiseDivide(Vec,Vec,Vec);
1840190745aSSatish Balay PetscPolymorphicSubroutine(VecPointwiseDivide,(Vec x,Vec y),(x,y,y))
1850c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecMaxPointwiseDivide(Vec,Vec,PetscReal*);
1862dcb1b2aSMatthew Knepley EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecShift(Vec,PetscScalar);
1870c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecReciprocal(Vec);
1880c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecPermute(Vec, IS, PetscTruth);
1890c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSqrt(Vec);
1900c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecAbs(Vec);
1910c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecDuplicate(Vec,Vec*);
1920c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecDuplicateVecs(Vec,PetscInt,Vec*[]);
1930c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecDestroyVecs(Vec[],PetscInt);
1940c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecStrideNormAll(Vec,NormType,PetscReal*);
1950c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecStrideMaxAll(Vec,PetscInt *,PetscReal *);
1960c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecStrideMinAll(Vec,PetscInt *,PetscReal *);
1970c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecStrideScaleAll(Vec,PetscScalar*);
1984a560884SBarry Smith 
1990c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecStrideNorm(Vec,PetscInt,NormType,PetscReal*);
200fcd5dd21SSatish Balay PetscPolymorphicFunction(VecStrideNorm,(Vec x,PetscInt i),(x,i,NORM_2,&r),PetscReal,r)
201fcd5dd21SSatish Balay PetscPolymorphicFunction(VecStrideNorm,(Vec x,PetscInt i,NormType t),(x,i,t,&r),PetscReal,r)
2020c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecStrideMax(Vec,PetscInt,PetscInt *,PetscReal *);
203fcd5dd21SSatish Balay PetscPolymorphicFunction(VecStrideMax,(Vec x,PetscInt i),(x,i,PETSC_NULL,&r),PetscReal,r)
2040c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecStrideMin(Vec,PetscInt,PetscInt *,PetscReal *);
205fcd5dd21SSatish Balay PetscPolymorphicFunction(VecStrideMin,(Vec x,PetscInt i),(x,i,PETSC_NULL,&r),PetscReal,r)
2060c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecStrideScale(Vec,PetscInt,PetscScalar*);
207ba966639SSatish Balay PetscPolymorphicScalar(VecStrideScale,(Vec x,PetscInt i,PetscScalar _t),(x,i,&_T))
208954b3ec6SBarry Smith 
209954b3ec6SBarry Smith 
2100c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecStrideGather(Vec,PetscInt,Vec,InsertMode);
2110c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecStrideScatter(Vec,PetscInt,Vec,InsertMode);
2120c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecStrideGatherAll(Vec,Vec*,InsertMode);
2130c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecStrideScatterAll(Vec*,Vec,InsertMode);
214d2655a18SBarry Smith 
2150c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSetValues(Vec,PetscInt,const PetscInt[],const PetscScalar[],InsertMode);
2160c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGetValues(Vec,PetscInt,const PetscInt[],PetscScalar[]);
2170c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecAssemblyBegin(Vec);
2180c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecAssemblyEnd(Vec);
2190c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecStashSetInitialSize(Vec,PetscInt,PetscInt);
2200c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecStashView(Vec,PetscViewer);
2210c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecStashGetInfo(Vec,PetscInt*,PetscInt*,PetscInt*,PetscInt*);
22262dc5420SSatish Balay 
2230c735eedSKris Buschelman extern PETSCVEC_DLLEXPORT PetscInt    VecSetValue_Row;
2240c735eedSKris Buschelman extern PETSCVEC_DLLEXPORT PetscScalar VecSetValue_Value;
22530de9b25SBarry Smith /*MC
22630de9b25SBarry Smith    VecSetValue - Set a single entry into a vector.
22730de9b25SBarry Smith 
22830de9b25SBarry Smith    Synopsis:
229d360dc6fSBarry Smith    PetscErrorCode VecSetValue(Vec v,int row,PetscScalar value, InsertMode mode);
23030de9b25SBarry Smith 
23130de9b25SBarry Smith    Not Collective
23230de9b25SBarry Smith 
23330de9b25SBarry Smith    Input Parameters:
23430de9b25SBarry Smith +  v - the vector
23530de9b25SBarry Smith .  row - the row location of the entry
23630de9b25SBarry Smith .  value - the value to insert
23730de9b25SBarry Smith -  mode - either INSERT_VALUES or ADD_VALUES
23830de9b25SBarry Smith 
23930de9b25SBarry Smith    Notes:
24030de9b25SBarry Smith    For efficiency one should use VecSetValues() and set several or
24130de9b25SBarry Smith    many values simultaneously if possible.
24230de9b25SBarry Smith 
2431d73ed98SBarry Smith    These values may be cached, so VecAssemblyBegin() and VecAssemblyEnd()
2441d73ed98SBarry Smith    MUST be called after all calls to VecSetValues() have been completed.
2451d73ed98SBarry Smith 
2461d73ed98SBarry Smith    VecSetValues() uses 0-based indices in Fortran as well as in C.
2471d73ed98SBarry Smith 
2481d73ed98SBarry Smith    Level: beginner
2491d73ed98SBarry Smith 
2501d73ed98SBarry Smith .seealso: VecSetValues(), VecAssemblyBegin(), VecAssemblyEnd(), VecSetValuesBlockedLocal(), VecSetValueLocal()
2511d73ed98SBarry Smith M*/
25250755921SBarry Smith PETSC_STATIC_INLINE PetscErrorCode VecSetValue(Vec v,PetscInt i,PetscScalar va,InsertMode mode) {return VecSetValues(v,1,&i,&va,mode);}
2531d73ed98SBarry Smith 
2541d73ed98SBarry Smith /*MC
2551d73ed98SBarry Smith    VecSetValueLocal - Set a single entry into a vector using the local numbering
2561d73ed98SBarry Smith 
2571d73ed98SBarry Smith    Synopsis:
258d360dc6fSBarry Smith    PetscErrorCode VecSetValueLocal(Vec v,int row,PetscScalar value, InsertMode mode);
2591d73ed98SBarry Smith 
2601d73ed98SBarry Smith    Not Collective
2611d73ed98SBarry Smith 
2621d73ed98SBarry Smith    Input Parameters:
2631d73ed98SBarry Smith +  v - the vector
2641d73ed98SBarry Smith .  row - the row location of the entry
2651d73ed98SBarry Smith .  value - the value to insert
2661d73ed98SBarry Smith -  mode - either INSERT_VALUES or ADD_VALUES
2671d73ed98SBarry Smith 
2681d73ed98SBarry Smith    Notes:
2691d73ed98SBarry Smith    For efficiency one should use VecSetValues() and set several or
2701d73ed98SBarry Smith    many values simultaneously if possible.
27130de9b25SBarry Smith 
27230de9b25SBarry Smith    These values may be cached, so VecAssemblyBegin() and VecAssemblyEnd()
27330de9b25SBarry Smith    MUST be called after all calls to VecSetValues() have been completed.
27430de9b25SBarry Smith 
27530de9b25SBarry Smith    VecSetValues() uses 0-based indices in Fortran as well as in C.
27630de9b25SBarry Smith 
27730de9b25SBarry Smith    Level: beginner
27830de9b25SBarry Smith 
2791d73ed98SBarry Smith .seealso: VecSetValues(), VecAssemblyBegin(), VecAssemblyEnd(), VecSetValuesBlockedLocal(), VecSetValue()
28030de9b25SBarry Smith M*/
281f1144a30SSatish Balay #define VecSetValueLocal(v,i,va,mode) ((VecSetValue_Row = i,VecSetValue_Value = va,0) || VecSetValuesLocal(v,1,&VecSetValue_Row,&VecSetValue_Value,mode))
28230de9b25SBarry Smith 
2830c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSetBlockSize(Vec,PetscInt);
2840c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGetBlockSize(Vec,PetscInt*);
285fcd5dd21SSatish Balay PetscPolymorphicFunction(VecGetBlockSize,(Vec x),(x,&i),PetscInt,i)
2860c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSetValuesBlocked(Vec,PetscInt,const PetscInt[],const PetscScalar[],InsertMode);
2878ed539a5SBarry Smith 
288fd487807SMatthew Knepley /* Dynamic creation and loading functions */
289fd487807SMatthew Knepley extern PetscFList VecList;
290d772e1d7SMatthew Knepley extern PetscTruth VecRegisterAllCalled;
291f69a0ea3SMatthew Knepley EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSetType(Vec, VecType);
2920c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGetType(Vec, VecType *);
2930c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecRegister(const char[],const char[],const char[],PetscErrorCode (*)(Vec));
2940c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecRegisterAll(const char []);
2950c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecRegisterDestroy(void);
29630de9b25SBarry Smith 
29730de9b25SBarry Smith /*MC
29830de9b25SBarry Smith   VecRegisterDynamic - Adds a new vector component implementation
29930de9b25SBarry Smith 
30030de9b25SBarry Smith   Synopsis:
301d360dc6fSBarry Smith   PetscErrorCode VecRegisterDynamic(char *name, char *path, char *func_name, PetscErrorCode (*create_func)(Vec))
30230de9b25SBarry Smith 
30330de9b25SBarry Smith   Not Collective
30430de9b25SBarry Smith 
30530de9b25SBarry Smith   Input Parameters:
30630de9b25SBarry Smith + name        - The name of a new user-defined creation routine
30730de9b25SBarry Smith . path        - The path (either absolute or relative) of the library containing this routine
30830de9b25SBarry Smith . func_name   - The name of routine to create method context
30930de9b25SBarry Smith - create_func - The creation routine itself
31030de9b25SBarry Smith 
31130de9b25SBarry Smith   Notes:
31230de9b25SBarry Smith   VecRegisterDynamic() may be called multiple times to add several user-defined vectors
31330de9b25SBarry Smith 
31430de9b25SBarry Smith   If dynamic libraries are used, then the fourth input argument (routine_create) is ignored.
31530de9b25SBarry Smith 
31630de9b25SBarry Smith   Sample usage:
31730de9b25SBarry Smith .vb
31830de9b25SBarry Smith     VecRegisterDynamic("my_vec","/home/username/my_lib/lib/libO/solaris/libmy.a", "MyVectorCreate", MyVectorCreate);
31930de9b25SBarry Smith .ve
32030de9b25SBarry Smith 
32130de9b25SBarry Smith   Then, your vector type can be chosen with the procedural interface via
32230de9b25SBarry Smith .vb
32330de9b25SBarry Smith     VecCreate(MPI_Comm, Vec *);
32430de9b25SBarry Smith     VecSetType(Vec,"my_vector_name");
32530de9b25SBarry Smith .ve
32630de9b25SBarry Smith    or at runtime via the option
32730de9b25SBarry Smith .vb
32830de9b25SBarry Smith     -vec_type my_vector_name
32930de9b25SBarry Smith .ve
33030de9b25SBarry Smith 
331ab901514SBarry Smith   Notes: $PETSC_ARCH occuring in pathname will be replaced with appropriate values.
33230de9b25SBarry Smith          If your function is not being put into a shared library then use VecRegister() instead
33330de9b25SBarry Smith 
33430de9b25SBarry Smith   Level: advanced
33530de9b25SBarry Smith 
33630de9b25SBarry Smith .keywords: Vec, register
33730de9b25SBarry Smith .seealso: VecRegisterAll(), VecRegisterDestroy(), VecRegister()
33830de9b25SBarry Smith M*/
339aa482453SBarry Smith #if defined(PETSC_USE_DYNAMIC_LIBRARIES)
340f1af5d2fSBarry Smith #define VecRegisterDynamic(a,b,c,d) VecRegister(a,b,c,0)
34188d459dfSBarry Smith #else
342f1af5d2fSBarry Smith #define VecRegisterDynamic(a,b,c,d) VecRegister(a,b,c,d)
34388d459dfSBarry Smith #endif
34488d459dfSBarry Smith 
34509321671SBarry Smith 
3460c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecScatterCreate(Vec,IS,Vec,IS,VecScatter *);
347fcd5dd21SSatish Balay PetscPolymorphicFunction(VecScatterCreate,(Vec x,IS is1,Vec y,IS is2),(x,is1,y,is2,&s),VecScatter,s)
3480190745aSSatish Balay PetscPolymorphicSubroutine(VecScatterCreate,(Vec x,IS is,Vec y,VecScatter *s),(x,is,y,PETSC_NULL,s))
349fcd5dd21SSatish Balay PetscPolymorphicFunction(VecScatterCreate,(Vec x,IS is,Vec y),(x,is,y,PETSC_NULL,&s),VecScatter,s)
3500190745aSSatish Balay PetscPolymorphicSubroutine(VecScatterCreate,(Vec x,Vec y,IS is,VecScatter *s),(x,PETSC_NULL,y,is,s))
351fcd5dd21SSatish Balay PetscPolymorphicFunction(VecScatterCreate,(Vec x,Vec y,IS is),(x,PETSC_NULL,y,is,&s),VecScatter,s)
3520c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecScatterPostRecvs(Vec,Vec,InsertMode,ScatterMode,VecScatter);
3530c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecScatterBegin(Vec,Vec,InsertMode,ScatterMode,VecScatter);
3540c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecScatterEnd(Vec,Vec,InsertMode,ScatterMode,VecScatter);
3550c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecScatterDestroy(VecScatter);
3560c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecScatterCopy(VecScatter,VecScatter *);
3570c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecScatterView(VecScatter,PetscViewer);
3580c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecScatterRemap(VecScatter,PetscInt *,PetscInt*);
3590c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecScatterGetMerged(VecScatter,PetscTruth*);
3602195c698SBarry Smith 
3610c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGetArray_Private(Vec,PetscScalar*[]);
3620c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecRestoreArray_Private(Vec,PetscScalar*[]);
3630c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGetArray4d(Vec,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscScalar****[]);
3640c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecRestoreArray4d(Vec,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscScalar****[]);
3650c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGetArray3d(Vec,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscScalar***[]);
3660c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecRestoreArray3d(Vec,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscScalar***[]);
3670c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGetArray2d(Vec,PetscInt,PetscInt,PetscInt,PetscInt,PetscScalar**[]);
3680c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecRestoreArray2d(Vec,PetscInt,PetscInt,PetscInt,PetscInt,PetscScalar**[]);
3690c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGetArray1d(Vec,PetscInt,PetscInt,PetscScalar *[]);
3700c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecRestoreArray1d(Vec,PetscInt,PetscInt,PetscScalar *[]);
371ab360428SBarry Smith 
3720c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecPlaceArray(Vec,const PetscScalar[]);
3730c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecResetArray(Vec);
3740c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecReplaceArray(Vec,const PetscScalar[]);
3750c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGetArrays(const Vec[],PetscInt,PetscScalar**[]);
3760c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecRestoreArrays(const Vec[],PetscInt,PetscScalar**[]);
37784cb2905SBarry Smith 
3780c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecValid(Vec,PetscTruth*);
3790c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecView(Vec,PetscViewer);
3800c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecViewFromOptions(Vec, char *);
3810c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecEqual(Vec,Vec,PetscTruth*);
382fcd5dd21SSatish Balay PetscPolymorphicFunction(VecEqual,(Vec x,Vec y),(x,y,&s),PetscTruth,s)
383f69a0ea3SMatthew Knepley EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecLoad(PetscViewer,VecType,Vec*);
3840c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecLoadIntoVector(PetscViewer,Vec);
3858ed539a5SBarry Smith 
3860c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGetSize(Vec,PetscInt*);
387fcd5dd21SSatish Balay PetscPolymorphicFunction(VecGetSize,(Vec x),(x,&s),PetscInt,s)
3880c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGetLocalSize(Vec,PetscInt*);
389fcd5dd21SSatish Balay PetscPolymorphicFunction(VecGetLocalSize,(Vec x),(x,&s),PetscInt,s)
3900c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGetOwnershipRange(Vec,PetscInt*,PetscInt*);
3918ed539a5SBarry Smith 
3920c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSetLocalToGlobalMapping(Vec,ISLocalToGlobalMapping);
3930c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSetValuesLocal(Vec,PetscInt,const PetscInt[],const PetscScalar[],InsertMode);
3940c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSetLocalToGlobalMappingBlock(Vec,ISLocalToGlobalMapping);
3950c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSetValuesBlockedLocal(Vec,PetscInt,const PetscInt[],const PetscScalar[],InsertMode);
39690f02eecSBarry Smith 
3970c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecDotBegin(Vec,Vec,PetscScalar *);
398ba966639SSatish Balay PetscPolymorphicSubroutine(VecDotBegin,(Vec x,Vec y),(x,y,PETSC_NULL))
3990c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecDotEnd(Vec,Vec,PetscScalar *);
400fcd5dd21SSatish Balay PetscPolymorphicFunction(VecDotEnd,(Vec x,Vec y),(x,y,&s),PetscScalar,s)
4010c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecTDotBegin(Vec,Vec,PetscScalar *);
402ba966639SSatish Balay PetscPolymorphicSubroutine(VecTDotBegin,(Vec x,Vec y),(x,y,PETSC_NULL))
4030c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecTDotEnd(Vec,Vec,PetscScalar *);
404fcd5dd21SSatish Balay PetscPolymorphicFunction(VecTDotEnd,(Vec x,Vec y),(x,y,&s),PetscScalar,s)
4050c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecNormBegin(Vec,NormType,PetscReal *);
406ba966639SSatish Balay PetscPolymorphicSubroutine(VecNormBegin,(Vec x,NormType t),(x,t,PETSC_NULL))
407ba966639SSatish Balay PetscPolymorphicSubroutine(VecNormBegin,(Vec x),(x,NORM_2,PETSC_NULL))
4080c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecNormEnd(Vec,NormType,PetscReal *);
409fcd5dd21SSatish Balay PetscPolymorphicFunction(VecNormEnd,(Vec x,NormType t),(x,t,&s),PetscReal,s)
410fcd5dd21SSatish Balay PetscPolymorphicFunction(VecNormEnd,(Vec x),(x,NORM_2,&s),PetscReal,s)
411d3c178dbSBarry Smith 
4128dbd3d1dSSatish Balay EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecMDotBegin(Vec,PetscInt,const Vec[],PetscScalar *);
4138dbd3d1dSSatish Balay EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecMDotEnd(Vec,PetscInt,const Vec[],PetscScalar *);
4148dbd3d1dSSatish Balay EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecMTDotBegin(Vec,PetscInt,const Vec[],PetscScalar *);
4158dbd3d1dSSatish Balay EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecMTDotEnd(Vec,PetscInt,const Vec[],PetscScalar *);
416a751f32aSSatish Balay 
417a751f32aSSatish Balay 
418fdbc4c26SBarry Smith typedef enum {VEC_IGNORE_OFF_PROC_ENTRIES,VEC_TREAT_OFF_PROC_ENTRIES} VecOption;
4190c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSetOption(Vec,VecOption);
42090f02eecSBarry Smith 
421ebe3b25bSBarry Smith /*
422ebe3b25bSBarry Smith    Expose VecGetArray()/VecRestoreArray() to users. Allows this to work without any function
423ebe3b25bSBarry Smith    call overhead on any 'native' Vecs.
424ebe3b25bSBarry Smith */
425e1fa1e0fSSatish Balay 
426e1fa1e0fSSatish Balay PETSC_EXTERN_CXX_END
4271d8d5f9aSSatish Balay #include "private/vecimpl.h"
428e1fa1e0fSSatish Balay PETSC_EXTERN_CXX_BEGIN
429ebe3b25bSBarry Smith 
4300c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecContourScale(Vec,PetscReal,PetscReal);
431522c5e43SBarry Smith 
43215091d37SBarry Smith /*
43315091d37SBarry Smith     These numbers need to match the entries in
4343c94ec11SBarry Smith   the function table in vecimpl.h
43515091d37SBarry Smith */
436*499d51b4SSatish Balay typedef enum { VECOP_VIEW = 32, VECOP_LOADINTOVECTOR = 40} VecOperation;
4370c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSetOperation(Vec,VecOperation,void(*)(void));
438b19c1e4cSBarry Smith 
439e182c471SBarry Smith /*
440e182c471SBarry Smith      Routines for dealing with ghosted vectors:
441e182c471SBarry Smith   vectors with ghost elements at the end of the array.
442e182c471SBarry Smith */
4430c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecCreateGhost(MPI_Comm,PetscInt,PetscInt,PetscInt,const PetscInt[],Vec*);
4440c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecCreateGhostWithArray(MPI_Comm,PetscInt,PetscInt,PetscInt,const PetscInt[],const PetscScalar[],Vec*);
4450c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecCreateGhostBlock(MPI_Comm,PetscInt,PetscInt,PetscInt,PetscInt,const PetscInt[],Vec*);
4460c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecCreateGhostBlockWithArray(MPI_Comm,PetscInt,PetscInt,PetscInt,PetscInt,const PetscInt[],const PetscScalar[],Vec*);
4470c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGhostGetLocalForm(Vec,Vec*);
448ba966639SSatish Balay PetscPolymorphicFunction(VecGhostGetLocalForm,(Vec x),(x,&s),Vec,s)
4490c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGhostRestoreLocalForm(Vec,Vec*);
4500c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGhostUpdateBegin(Vec,InsertMode,ScatterMode);
4510c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGhostUpdateEnd(Vec,InsertMode,ScatterMode);
452e182c471SBarry Smith 
4530c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecConjugate(Vec);
45434233285SBarry Smith 
4550c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecScatterCreateToAll(Vec,VecScatter*,Vec*);
4560c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecScatterCreateToZero(Vec,VecScatter*,Vec*);
457bba1ac68SSatish Balay 
4580c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT PetscViewerMathematicaGetVector(PetscViewer, Vec);
4590c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT PetscViewerMathematicaPutVector(PetscViewer, Vec);
4607dbadf16SMatthew Knepley 
461d59c15a7SBarry Smith /*S
462d59c15a7SBarry Smith      Vecs - Collection of vectors where the data for the vectors is stored in
463d59c15a7SBarry Smith             one continquous memory
464d59c15a7SBarry Smith 
465d59c15a7SBarry Smith    Level: advanced
466d59c15a7SBarry Smith 
467d59c15a7SBarry Smith    Notes:
468d59c15a7SBarry Smith     Temporary construct for handling multiply right hand side solves
469d59c15a7SBarry Smith 
470d59c15a7SBarry Smith     This is faked by storing a single vector that has enough array space for
471d59c15a7SBarry Smith     n vectors
472d59c15a7SBarry Smith 
473d59c15a7SBarry Smith   Concepts: parallel decomposition
474d59c15a7SBarry Smith 
475d59c15a7SBarry Smith S*/
47695fbd943SSatish Balay         struct _n_Vecs  {PetscInt n; Vec v;};
47795fbd943SSatish Balay typedef struct _n_Vecs* Vecs;
478d59c15a7SBarry Smith #define VecsDestroy(x)            (VecDestroy((x)->v)         || PetscFree(x))
47995fbd943SSatish Balay #define VecsCreateSeq(comm,p,m,x) (PetscNew(struct _n_Vecs,x) || VecCreateSeq(comm,p*m,&(*(x))->v) || (-1 == ((*(x))->n = (m))))
48095fbd943SSatish Balay #define VecsCreateSeqWithArray(comm,p,m,a,x) (PetscNew(struct _n_Vecs,x) || VecCreateSeqWithArray(comm,p*m,a,&(*(x))->v) || (-1 == ((*(x))->n = (m))))
48195fbd943SSatish Balay #define VecsDuplicate(x,y)        (PetscNew(struct _n_Vecs,y) || VecDuplicate(x->v,&(*(y))->v) || (-1 == ((*(y))->n = (x)->n)))
482e9fa29b7SSatish Balay 
483e9fa29b7SSatish Balay 
484e9fa29b7SSatish Balay PETSC_EXTERN_CXX_END
4852eac72dbSBarry Smith #endif
486