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 148a124369SBarry Smith PetscMap - Abstract PETSc object that defines the layout of vector and 15013c094aSBarry Smith matrices across processors 1609321671SBarry Smith 1709321671SBarry Smith Level: advanced 1809321671SBarry Smith 1909321671SBarry Smith Notes: 2009321671SBarry Smith Does not play a role in the PETSc design, can be ignored 2109321671SBarry Smith 2209321671SBarry Smith Concepts: parallel decomposition 2309321671SBarry Smith 248a124369SBarry Smith .seealso: PetscMapCreateMPI() 2509321671SBarry Smith S*/ 268a124369SBarry Smith typedef struct _p_PetscMap* PetscMap; 2709321671SBarry Smith 28d772e1d7SMatthew Knepley #define MAP_SEQ "seq" 29d772e1d7SMatthew Knepley #define MAP_MPI "mpi" 3049773a63SBarry Smith #define PetscMapType char* 31d772e1d7SMatthew Knepley 32d772e1d7SMatthew Knepley /* Logging support */ 336849ba73SBarry Smith extern PetscCookie MAP_COOKIE; 34d772e1d7SMatthew Knepley 350c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT PetscMapCreate(MPI_Comm,PetscMap*); 3665f510b9SBarry Smith PetscPolymorphicSubroutine(PetscMapCreate,(PetscMap*m),(m)) 3765f510b9SBarry Smith PetscPolymorphicFunction(PetscMapCreate,(void),(PETSC_COMM_SELF,&m),PetscMap,m) 380c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT PetscMapCreateMPI(MPI_Comm,PetscInt,PetscInt,PetscMap*); 3965f510b9SBarry Smith PetscPolymorphicFunction(PetscMapCreateMPI,(MPI_Comm comm,PetscInt l,PetscInt g),(comm,l,g,&m),PetscMap,m) 400c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT PetscMapSetFromOptions(PetscMap); 410c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT PetscMapPrintHelp(PetscMap); 420c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT PetscMapDestroy(PetscMap); 43d772e1d7SMatthew Knepley 440c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT PetscMapSetLocalSize(PetscMap,PetscInt); 450c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT PetscMapGetLocalSize(PetscMap,PetscInt *); 469785fde0SSatish Balay PetscPolymorphicFunction(PetscMapGetLocalSize,(PetscMap m),(m,&s),PetscInt,s) 470c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT PetscMapSetSize(PetscMap,PetscInt); 480c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT PetscMapGetSize(PetscMap,PetscInt *); 499785fde0SSatish Balay PetscPolymorphicFunction(PetscMapGetSize,(PetscMap m),(m,&s),PetscInt,s) 500c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT PetscMapGetLocalRange(PetscMap,PetscInt *,PetscInt *); 510c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT PetscMapGetGlobalRange(PetscMap,PetscInt *[]); 52d772e1d7SMatthew Knepley 53d772e1d7SMatthew Knepley /* Dynamic creation and loading functions */ 54d772e1d7SMatthew Knepley extern PetscFList PetscMapList; 55d772e1d7SMatthew Knepley extern PetscTruth PetscMapRegisterAllCalled; 560c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT PetscMapSetType(PetscMap, const PetscMapType); 570c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT PetscMapGetType(PetscMap, PetscMapType *); 589785fde0SSatish Balay PetscPolymorphicFunction(PetscMapGetType,(PetscMap m),(m,&t),PetscMapType,t) 590c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT PetscMapRegister(const char[],const char[],const char[],PetscErrorCode (*)(PetscMap)); 600c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT PetscMapRegisterAll(const char []); 610c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT PetscMapRegisterDestroy(void); 62d772e1d7SMatthew Knepley #if defined(PETSC_USE_DYNAMIC_LIBRARIES) 63d772e1d7SMatthew Knepley #define PetscMapRegisterDynamic(a,b,c,d) PetscMapRegister(a,b,c,0) 64d772e1d7SMatthew Knepley #else 65d772e1d7SMatthew Knepley #define PetscMapRegisterDynamic(a,b,c,d) PetscMapRegister(a,b,c,d) 66d772e1d7SMatthew Knepley #endif 67d772e1d7SMatthew Knepley 6809321671SBarry Smith /*S 6909321671SBarry Smith Vec - Abstract PETSc vector object 7009321671SBarry Smith 7109321671SBarry Smith Level: beginner 7209321671SBarry Smith 7309321671SBarry Smith Concepts: field variables, unknowns, arrays 7409321671SBarry Smith 7509321671SBarry Smith .seealso: VecCreate(), VecType, VecSetType() 7609321671SBarry Smith S*/ 77f09e8eb9SSatish Balay typedef struct _p_Vec* Vec; 7809321671SBarry Smith 7909321671SBarry Smith /*S 8009321671SBarry Smith VecScatter - Object used to manage communication of data 8109321671SBarry Smith between vectors in parallel. Manages both scatters and gathers 8209321671SBarry Smith 8309321671SBarry Smith Level: beginner 8409321671SBarry Smith 8509321671SBarry Smith Concepts: scatter 8609321671SBarry Smith 8709321671SBarry Smith .seealso: VecScatterCreate(), VecScatterBegin(), VecScatterEnd() 8809321671SBarry Smith S*/ 89f09e8eb9SSatish Balay typedef struct _p_VecScatter* VecScatter; 9009321671SBarry Smith 9109321671SBarry Smith /*E 9209321671SBarry Smith VecType - String with the name of a PETSc vector or the creation function 9309321671SBarry Smith with an optional dynamic library name, for example 9409321671SBarry Smith http://www.mcs.anl.gov/petsc/lib.a:myveccreate() 9509321671SBarry Smith 9609321671SBarry Smith Level: beginner 9709321671SBarry Smith 9809321671SBarry Smith .seealso: VecSetType(), Vec 9909321671SBarry Smith E*/ 1000676abe4SMatthew Knepley #define VECSEQ "seq" 1010676abe4SMatthew Knepley #define VECMPI "mpi" 1020676abe4SMatthew Knepley #define VECFETI "feti" 1030676abe4SMatthew Knepley #define VECSHARED "shared" 10449773a63SBarry Smith #define VecType char* 1052eac72dbSBarry Smith 106fd487807SMatthew Knepley /* Logging support */ 107552e946dSBarry Smith #define VEC_FILE_COOKIE 1211214 1080c735eedSKris Buschelman extern PETSCVEC_DLLEXPORT PetscCookie VEC_COOKIE; 1090c735eedSKris Buschelman extern PETSCVEC_DLLEXPORT PetscCookie VEC_SCATTER_COOKIE; 1106849ba73SBarry Smith extern PetscEvent VEC_View, VEC_Max, VEC_Min, VEC_DotBarrier, VEC_Dot, VEC_MDotBarrier, VEC_MDot, VEC_TDot, VEC_MTDot; 1116849ba73SBarry Smith extern PetscEvent VEC_Norm, VEC_Normalize, VEC_Scale, VEC_Copy, VEC_Set, VEC_AXPY, VEC_AYPX, VEC_WAXPY, VEC_MAXPY; 1126849ba73SBarry Smith extern PetscEvent VEC_AssemblyEnd, VEC_PointwiseMult, VEC_SetValues, VEC_Load, VEC_ScatterBarrier, VEC_ScatterBegin, VEC_ScatterEnd; 1136849ba73SBarry Smith extern PetscEvent VEC_SetRandom, VEC_ReduceArithmetic, VEC_ReduceBarrier, VEC_ReduceCommunication; 1146849ba73SBarry Smith extern PetscEvent VEC_Swap, VEC_AssemblyBegin, VEC_NormBarrier; 1158ba1e511SMatthew Knepley 1160c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecInitializePackage(char *); 117fd487807SMatthew Knepley 1180c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecCreate(MPI_Comm,Vec *); 119045ff3e0SBarry Smith PetscPolymorphicSubroutine(VecCreate,(Vec *x),(PETSC_COMM_SELF,x)) 1200c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecCreateSeq(MPI_Comm,PetscInt,Vec*); 121045ff3e0SBarry Smith PetscPolymorphicSubroutine(VecCreateSeq,(PetscInt n,Vec *x),(PETSC_COMM_SELF,n,x)) 1220c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecCreateMPI(MPI_Comm,PetscInt,PetscInt,Vec*); 123045ff3e0SBarry Smith PetscPolymorphicSubroutine(VecCreateMPI,(PetscInt n,PetscInt N,Vec *x),(PETSC_COMM_WORLD,n,N,x)) 1240c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecCreateSeqWithArray(MPI_Comm,PetscInt,const PetscScalar[],Vec*); 125045ff3e0SBarry Smith PetscPolymorphicSubroutine(VecCreateSeqWithArray,(PetscInt n,PetscScalar s[],Vec *x),(PETSC_COMM_SELF,n,s,x)) 1260c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecCreateMPIWithArray(MPI_Comm,PetscInt,PetscInt,const PetscScalar[],Vec*); 127045ff3e0SBarry Smith PetscPolymorphicSubroutine(VecCreateMPIWithArray,(PetscInt n,PetscInt N,PetscScalar s[],Vec *x),(PETSC_COMM_WORLD,n,N,s,x)) 1280c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecCreateShared(MPI_Comm,PetscInt,PetscInt,Vec*); 1290c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSetFromOptions(Vec); 1300c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecPrintHelp(Vec); 1310c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecDestroy(Vec); 1324b0e389bSBarry Smith 1330c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSetSizes(Vec,PetscInt,PetscInt); 134fd487807SMatthew Knepley 1350c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecDot(Vec,Vec,PetscScalar*); 13653847eedSBarry Smith PetscPolymorphicFunction(VecDot,(Vec x,Vec y),(x,y,&s),PetscScalar,s); 1370c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecTDot(Vec,Vec,PetscScalar*); 13853847eedSBarry Smith PetscPolymorphicFunction(VecTDot,(Vec x,Vec y),(x,y,&s),PetscScalar,s); 1390c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecMDot(PetscInt,Vec,const Vec[],PetscScalar*); 1400c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecMTDot(PetscInt,Vec,const Vec[],PetscScalar*); 141cddf8d76SBarry Smith 14209321671SBarry Smith /*E 14309321671SBarry Smith NormType - determines what type of norm to compute 14409321671SBarry Smith 14509321671SBarry Smith Level: beginner 14609321671SBarry Smith 14709321671SBarry Smith .seealso: VecNorm(), VecNormBegin(), VecNormEnd(), MatNorm() 14809321671SBarry Smith E*/ 1499dcbbd2bSBarry Smith typedef enum {NORM_1=0,NORM_2=1,NORM_FROBENIUS=2,NORM_INFINITY=3,NORM_1_AND_2=4} NormType; 1509dcbbd2bSBarry Smith extern const char *NormTypes[]; 151cddf8d76SBarry Smith #define NORM_MAX NORM_INFINITY 15209321671SBarry Smith 1539b250c83SBarry Smith /*MC 1549b250c83SBarry Smith NORM_1 - the one norm, ||v|| = sum_i | v_i |. ||A|| = max_j || v_*j ||, maximum column sum 1559b250c83SBarry Smith 1569b250c83SBarry Smith Level: beginner 1579b250c83SBarry Smith 1589b250c83SBarry Smith .seealso: NormType, MatNorm(), VecNorm(), VecNormBegin(), VecNormEnd(), NORM_2, NORM_FROBENIUS, 1599b250c83SBarry Smith NORM_INFINITY, NORM_1_AND_2 1609b250c83SBarry Smith 1619b250c83SBarry Smith M*/ 1629b250c83SBarry Smith 1639b250c83SBarry Smith /*MC 1649b250c83SBarry Smith NORM_2 - the two norm, ||v|| = sqrt(sum_i (v_i)^2) (vectors only) 1659b250c83SBarry Smith 1669b250c83SBarry Smith Level: beginner 1679b250c83SBarry Smith 1689b250c83SBarry Smith .seealso: NormType, MatNorm(), VecNorm(), VecNormBegin(), VecNormEnd(), NORM_1, NORM_FROBENIUS, 1699b250c83SBarry Smith NORM_INFINITY, NORM_1_AND_2 1709b250c83SBarry Smith 1719b250c83SBarry Smith M*/ 1729b250c83SBarry Smith 1739b250c83SBarry Smith /*MC 1749b250c83SBarry Smith NORM_FROBENIUS - ||A|| = sqrt(sum_ij (A_ij)^2), same as NORM_2 for vectors 1759b250c83SBarry Smith 1769b250c83SBarry Smith Level: beginner 1779b250c83SBarry Smith 1789b250c83SBarry Smith .seealso: NormType, MatNorm(), VecNorm(), VecNormBegin(), VecNormEnd(), NORM_1, NORM_2, 1799b250c83SBarry Smith NORM_INFINITY, NORM_1_AND_2 1809b250c83SBarry Smith 1819b250c83SBarry Smith M*/ 1829b250c83SBarry Smith 1839b250c83SBarry Smith /*MC 1849b250c83SBarry Smith NORM_INFINITY - ||v|| = max_i |v_i|. ||A|| = max_i || v_i* ||, maximum row sum 1859b250c83SBarry Smith 1869b250c83SBarry Smith Level: beginner 1879b250c83SBarry Smith 1889b250c83SBarry Smith .seealso: NormType, MatNorm(), VecNorm(), VecNormBegin(), VecNormEnd(), NORM_1, NORM_2, 1899b250c83SBarry Smith NORM_FROBINIUS, NORM_1_AND_2 1909b250c83SBarry Smith 1919b250c83SBarry Smith M*/ 1929b250c83SBarry Smith 1939b250c83SBarry Smith /*MC 1949b250c83SBarry Smith NORM_1_AND_2 - computes both the 1 and 2 norm of a vector 1959b250c83SBarry Smith 1969b250c83SBarry Smith Level: beginner 1979b250c83SBarry Smith 1989b250c83SBarry Smith .seealso: NormType, MatNorm(), VecNorm(), VecNormBegin(), VecNormEnd(), NORM_1, NORM_2, 1999b250c83SBarry Smith NORM_FROBINIUS, NORM_INFINITY 2009b250c83SBarry Smith 2019b250c83SBarry Smith M*/ 2029b250c83SBarry Smith 2039b250c83SBarry Smith /*MC 2049b250c83SBarry Smith NORM_MAX - see NORM_INFINITY 2059b250c83SBarry Smith 206d41222bbSBarry Smith Level: beginner 207d41222bbSBarry Smith 2089b250c83SBarry Smith M*/ 2099b250c83SBarry Smith 2100c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecNorm(Vec,NormType,PetscReal *); 211045ff3e0SBarry Smith PetscPolymorphicSubroutine(VecNorm,(Vec x,PetscReal *r),(x,NORM_2,r)) 212c714d2d0SBarry Smith PetscPolymorphicFunction(VecNorm,(Vec x,NormType t),(x,t,&r),PetscReal,r) 213c714d2d0SBarry Smith PetscPolymorphicFunction(VecNorm,(Vec x),(x,NORM_2,&r),PetscReal,r) 2140c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecNormComposedDataID(NormType,PetscInt*); 2150c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecNormalize(Vec,PetscReal *); 2160c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSum(Vec,PetscScalar*); 2170c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecMax(Vec,PetscInt*,PetscReal *); 218045ff3e0SBarry Smith PetscPolymorphicSubroutine(VecMax,(Vec x,PetscReal *r),(x,PETSC_NULL,r)) 2190c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecMin(Vec,PetscInt*,PetscReal *); 220045ff3e0SBarry Smith PetscPolymorphicSubroutine(VecMin,(Vec x,PetscReal *r),(x,PETSC_NULL,r)) 2210c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecScale(const PetscScalar *a,Vec v); 2220c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecCopy(Vec,Vec); 2230c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSetRandom(PetscRandom,Vec); 2240c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSet(const PetscScalar*,Vec); 2250c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSwap(Vec,Vec); 2260c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecAXPY(const PetscScalar*,Vec,Vec); 22753847eedSBarry Smith PetscPolymorphicScalar(VecAXPY,(PetscScalar _t,Vec x,Vec y),(&_T,x,y)) 2280c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecAXPBY(const PetscScalar*,const PetscScalar *,Vec,Vec); 22953847eedSBarry Smith #if !defined(PETSC_USE_EXTERN_CXX) && defined(__cplusplus) 23053847eedSBarry Smith PETSC_STATIC_INLINE PetscErrorCode VecAXPBY(PetscScalar a,PetscScalar b,Vec x,Vec y) {PetscScalar _a = a,_b = b; return VecAXPBY(&_a,&_b,x,y);} 23153847eedSBarry Smith #endif 23253847eedSBarry Smith EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecMAXPY(PetscInt,const PetscScalar[],Vec,Vec*); 2330c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecAYPX(const PetscScalar*,Vec,Vec); 23453847eedSBarry Smith PetscPolymorphicScalar(VecAYPX,(PetscScalar _t,Vec x,Vec y),(&_T,x,y)) 2350c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecWAXPY(const PetscScalar*,Vec,Vec,Vec); 23653847eedSBarry Smith PetscPolymorphicScalar(VecWAXPY,(PetscScalar _t,Vec x,Vec y,Vec z),(&_T,x,y,z)) 2370c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecPointwiseMax(Vec,Vec,Vec); 23853847eedSBarry Smith PetscPolymorphicSubroutine(VecPointwiseMax,(Vec x,Vec y),(x,y,y)); 2390c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecPointwiseMaxAbs(Vec,Vec,Vec); 24053847eedSBarry Smith PetscPolymorphicSubroutine(VecPointwiseMaxAbs,(Vec x,Vec y),(x,y,y)); 2410c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecPointwiseMin(Vec,Vec,Vec); 24253847eedSBarry Smith PetscPolymorphicSubroutine(VecPointwiseMin,(Vec x,Vec y),(x,y,y)); 2430c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecPointwiseMult(Vec,Vec,Vec); 24453847eedSBarry Smith PetscPolymorphicSubroutine(VecPointwiseMult,(Vec x,Vec y),(x,y,y)); 2450c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecPointwiseDivide(Vec,Vec,Vec); 24653847eedSBarry Smith PetscPolymorphicSubroutine(VecPointwiseDivide,(Vec x,Vec y),(x,y,y)); 2470c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecMaxPointwiseDivide(Vec,Vec,PetscReal*); 2480c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecShift(const PetscScalar*,Vec); 2490c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecReciprocal(Vec); 2500c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecPermute(Vec, IS, PetscTruth); 2510c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSqrt(Vec); 2520c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecAbs(Vec); 2530c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecDuplicate(Vec,Vec*); 2540c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecDuplicateVecs(Vec,PetscInt,Vec*[]); 2550c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecDestroyVecs(Vec[],PetscInt); 2560c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGetPetscMap(Vec,PetscMap*); 25753847eedSBarry Smith PetscPolymorphicFunction(VecGetPetscMap,(Vec x),(x,&y),PetscMap,y); 2580c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecStrideNormAll(Vec,NormType,PetscReal*); 2590c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecStrideMaxAll(Vec,PetscInt *,PetscReal *); 2600c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecStrideMinAll(Vec,PetscInt *,PetscReal *); 2610c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecStrideScaleAll(Vec,PetscScalar*); 2624a560884SBarry Smith 2630c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecStrideNorm(Vec,PetscInt,NormType,PetscReal*); 26453847eedSBarry Smith PetscPolymorphicFunction(VecStrideNorm,(Vec x,PetscInt i),(x,i,NORM_2,&r),PetscReal,r); 26553847eedSBarry Smith PetscPolymorphicFunction(VecStrideNorm,(Vec x,PetscInt i,NormType t),(x,i,t,&r),PetscReal,r); 2660c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecStrideMax(Vec,PetscInt,PetscInt *,PetscReal *); 26753847eedSBarry Smith PetscPolymorphicFunction(VecStrideMax,(Vec x,PetscInt i),(x,i,PETSC_NULL,&r),PetscReal,r); 2680c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecStrideMin(Vec,PetscInt,PetscInt *,PetscReal *); 26953847eedSBarry Smith PetscPolymorphicFunction(VecStrideMin,(Vec x,PetscInt i),(x,i,PETSC_NULL,&r),PetscReal,r); 2700c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecStrideScale(Vec,PetscInt,PetscScalar*); 271*0c451bc4SBarry Smith PetscPolymorphicScalar(VecStrideScale,(Vec x,PetscInt i,PetscScalar _t),(x,i,&_T)); 2720c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecStrideGather(Vec,PetscInt,Vec,InsertMode); 2730c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecStrideScatter(Vec,PetscInt,Vec,InsertMode); 2740c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecStrideGatherAll(Vec,Vec*,InsertMode); 2750c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecStrideScatterAll(Vec*,Vec,InsertMode); 276d2655a18SBarry Smith 2770c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSetValues(Vec,PetscInt,const PetscInt[],const PetscScalar[],InsertMode); 2780c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGetValues(Vec,PetscInt,const PetscInt[],PetscScalar[]); 2790c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecAssemblyBegin(Vec); 2800c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecAssemblyEnd(Vec); 2810c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecStashSetInitialSize(Vec,PetscInt,PetscInt); 2820c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecStashView(Vec,PetscViewer); 2830c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecStashGetInfo(Vec,PetscInt*,PetscInt*,PetscInt*,PetscInt*); 28462dc5420SSatish Balay 2850c735eedSKris Buschelman extern PETSCVEC_DLLEXPORT PetscInt VecSetValue_Row; 2860c735eedSKris Buschelman extern PETSCVEC_DLLEXPORT PetscScalar VecSetValue_Value; 28730de9b25SBarry Smith /*MC 28830de9b25SBarry Smith VecSetValue - Set a single entry into a vector. 28930de9b25SBarry Smith 29030de9b25SBarry Smith Synopsis: 291d360dc6fSBarry Smith PetscErrorCode VecSetValue(Vec v,int row,PetscScalar value, InsertMode mode); 29230de9b25SBarry Smith 29330de9b25SBarry Smith Not Collective 29430de9b25SBarry Smith 29530de9b25SBarry Smith Input Parameters: 29630de9b25SBarry Smith + v - the vector 29730de9b25SBarry Smith . row - the row location of the entry 29830de9b25SBarry Smith . value - the value to insert 29930de9b25SBarry Smith - mode - either INSERT_VALUES or ADD_VALUES 30030de9b25SBarry Smith 30130de9b25SBarry Smith Notes: 30230de9b25SBarry Smith For efficiency one should use VecSetValues() and set several or 30330de9b25SBarry Smith many values simultaneously if possible. 30430de9b25SBarry Smith 3051d73ed98SBarry Smith These values may be cached, so VecAssemblyBegin() and VecAssemblyEnd() 3061d73ed98SBarry Smith MUST be called after all calls to VecSetValues() have been completed. 3071d73ed98SBarry Smith 3081d73ed98SBarry Smith VecSetValues() uses 0-based indices in Fortran as well as in C. 3091d73ed98SBarry Smith 3101d73ed98SBarry Smith Level: beginner 3111d73ed98SBarry Smith 3121d73ed98SBarry Smith .seealso: VecSetValues(), VecAssemblyBegin(), VecAssemblyEnd(), VecSetValuesBlockedLocal(), VecSetValueLocal() 3131d73ed98SBarry Smith M*/ 314f1144a30SSatish Balay #define VecSetValue(v,i,va,mode) ((VecSetValue_Row = i,VecSetValue_Value = va,0) || VecSetValues(v,1,&VecSetValue_Row,&VecSetValue_Value,mode)) 3151d73ed98SBarry Smith 3161d73ed98SBarry Smith /*MC 3171d73ed98SBarry Smith VecSetValueLocal - Set a single entry into a vector using the local numbering 3181d73ed98SBarry Smith 3191d73ed98SBarry Smith Synopsis: 320d360dc6fSBarry Smith PetscErrorCode VecSetValueLocal(Vec v,int row,PetscScalar value, InsertMode mode); 3211d73ed98SBarry Smith 3221d73ed98SBarry Smith Not Collective 3231d73ed98SBarry Smith 3241d73ed98SBarry Smith Input Parameters: 3251d73ed98SBarry Smith + v - the vector 3261d73ed98SBarry Smith . row - the row location of the entry 3271d73ed98SBarry Smith . value - the value to insert 3281d73ed98SBarry Smith - mode - either INSERT_VALUES or ADD_VALUES 3291d73ed98SBarry Smith 3301d73ed98SBarry Smith Notes: 3311d73ed98SBarry Smith For efficiency one should use VecSetValues() and set several or 3321d73ed98SBarry Smith many values simultaneously if possible. 33330de9b25SBarry Smith 33430de9b25SBarry Smith These values may be cached, so VecAssemblyBegin() and VecAssemblyEnd() 33530de9b25SBarry Smith MUST be called after all calls to VecSetValues() have been completed. 33630de9b25SBarry Smith 33730de9b25SBarry Smith VecSetValues() uses 0-based indices in Fortran as well as in C. 33830de9b25SBarry Smith 33930de9b25SBarry Smith Level: beginner 34030de9b25SBarry Smith 3411d73ed98SBarry Smith .seealso: VecSetValues(), VecAssemblyBegin(), VecAssemblyEnd(), VecSetValuesBlockedLocal(), VecSetValue() 34230de9b25SBarry Smith M*/ 343f1144a30SSatish Balay #define VecSetValueLocal(v,i,va,mode) ((VecSetValue_Row = i,VecSetValue_Value = va,0) || VecSetValuesLocal(v,1,&VecSetValue_Row,&VecSetValue_Value,mode)) 34430de9b25SBarry Smith 3450c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSetBlockSize(Vec,PetscInt); 3460c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGetBlockSize(Vec,PetscInt*); 34753847eedSBarry Smith PetscPolymorphicFunction(VecGetBlockSize,(Vec x),(x,&i),PetscInt,i); 3480c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSetValuesBlocked(Vec,PetscInt,const PetscInt[],const PetscScalar[],InsertMode); 3498ed539a5SBarry Smith 350fd487807SMatthew Knepley /* Dynamic creation and loading functions */ 351fd487807SMatthew Knepley extern PetscFList VecList; 352d772e1d7SMatthew Knepley extern PetscTruth VecRegisterAllCalled; 3530c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSetType(Vec, const VecType); 3540c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGetType(Vec, VecType *); 3550c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecRegister(const char[],const char[],const char[],PetscErrorCode (*)(Vec)); 3560c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecRegisterAll(const char []); 3570c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecRegisterDestroy(void); 35830de9b25SBarry Smith 35930de9b25SBarry Smith /*MC 36030de9b25SBarry Smith VecRegisterDynamic - Adds a new vector component implementation 36130de9b25SBarry Smith 36230de9b25SBarry Smith Synopsis: 363d360dc6fSBarry Smith PetscErrorCode VecRegisterDynamic(char *name, char *path, char *func_name, PetscErrorCode (*create_func)(Vec)) 36430de9b25SBarry Smith 36530de9b25SBarry Smith Not Collective 36630de9b25SBarry Smith 36730de9b25SBarry Smith Input Parameters: 36830de9b25SBarry Smith + name - The name of a new user-defined creation routine 36930de9b25SBarry Smith . path - The path (either absolute or relative) of the library containing this routine 37030de9b25SBarry Smith . func_name - The name of routine to create method context 37130de9b25SBarry Smith - create_func - The creation routine itself 37230de9b25SBarry Smith 37330de9b25SBarry Smith Notes: 37430de9b25SBarry Smith VecRegisterDynamic() may be called multiple times to add several user-defined vectors 37530de9b25SBarry Smith 37630de9b25SBarry Smith If dynamic libraries are used, then the fourth input argument (routine_create) is ignored. 37730de9b25SBarry Smith 37830de9b25SBarry Smith Sample usage: 37930de9b25SBarry Smith .vb 38030de9b25SBarry Smith VecRegisterDynamic("my_vec","/home/username/my_lib/lib/libO/solaris/libmy.a", "MyVectorCreate", MyVectorCreate); 38130de9b25SBarry Smith .ve 38230de9b25SBarry Smith 38330de9b25SBarry Smith Then, your vector type can be chosen with the procedural interface via 38430de9b25SBarry Smith .vb 38530de9b25SBarry Smith VecCreate(MPI_Comm, Vec *); 38630de9b25SBarry Smith VecSetType(Vec,"my_vector_name"); 38730de9b25SBarry Smith .ve 38830de9b25SBarry Smith or at runtime via the option 38930de9b25SBarry Smith .vb 39030de9b25SBarry Smith -vec_type my_vector_name 39130de9b25SBarry Smith .ve 39230de9b25SBarry Smith 393ab901514SBarry Smith Notes: $PETSC_ARCH occuring in pathname will be replaced with appropriate values. 39430de9b25SBarry Smith If your function is not being put into a shared library then use VecRegister() instead 39530de9b25SBarry Smith 39630de9b25SBarry Smith Level: advanced 39730de9b25SBarry Smith 39830de9b25SBarry Smith .keywords: Vec, register 39930de9b25SBarry Smith .seealso: VecRegisterAll(), VecRegisterDestroy(), VecRegister() 40030de9b25SBarry Smith M*/ 401aa482453SBarry Smith #if defined(PETSC_USE_DYNAMIC_LIBRARIES) 402f1af5d2fSBarry Smith #define VecRegisterDynamic(a,b,c,d) VecRegister(a,b,c,0) 40388d459dfSBarry Smith #else 404f1af5d2fSBarry Smith #define VecRegisterDynamic(a,b,c,d) VecRegister(a,b,c,d) 40588d459dfSBarry Smith #endif 40688d459dfSBarry Smith 40709321671SBarry Smith 4080c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecScatterCreate(Vec,IS,Vec,IS,VecScatter *); 40953847eedSBarry Smith PetscPolymorphicFunction(VecScatterCreate,(Vec x,IS is1,Vec y,IS is2),(x,is1,y,is2,&s),VecScatter,s); 41053847eedSBarry Smith PetscPolymorphicSubroutine(VecScatterCreate,(Vec x,IS is,Vec y,VecScatter *s),(x,is,y,PETSC_NULL,s)); 41153847eedSBarry Smith PetscPolymorphicFunction(VecScatterCreate,(Vec x,IS is,Vec y),(x,is,y,PETSC_NULL,&s),VecScatter,s); 41253847eedSBarry Smith PetscPolymorphicSubroutine(VecScatterCreate,(Vec x,Vec y,IS is,VecScatter *s),(x,PETSC_NULL,y,is,s)); 41353847eedSBarry Smith PetscPolymorphicFunction(VecScatterCreate,(Vec x,Vec y,IS is),(x,PETSC_NULL,y,is,&s),VecScatter,s); 4140c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecScatterPostRecvs(Vec,Vec,InsertMode,ScatterMode,VecScatter); 4150c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecScatterBegin(Vec,Vec,InsertMode,ScatterMode,VecScatter); 4160c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecScatterEnd(Vec,Vec,InsertMode,ScatterMode,VecScatter); 4170c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecScatterDestroy(VecScatter); 4180c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecScatterCopy(VecScatter,VecScatter *); 4190c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecScatterView(VecScatter,PetscViewer); 4200c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecScatterRemap(VecScatter,PetscInt *,PetscInt*); 4210c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecScatterGetMerged(VecScatter,PetscTruth*); 4222195c698SBarry Smith 4230c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGetArray_Private(Vec,PetscScalar*[]); 4240c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecRestoreArray_Private(Vec,PetscScalar*[]); 4250c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGetArray4d(Vec,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscScalar****[]); 4260c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecRestoreArray4d(Vec,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscScalar****[]); 4270c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGetArray3d(Vec,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscScalar***[]); 4280c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecRestoreArray3d(Vec,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscScalar***[]); 4290c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGetArray2d(Vec,PetscInt,PetscInt,PetscInt,PetscInt,PetscScalar**[]); 4300c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecRestoreArray2d(Vec,PetscInt,PetscInt,PetscInt,PetscInt,PetscScalar**[]); 4310c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGetArray1d(Vec,PetscInt,PetscInt,PetscScalar *[]); 4320c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecRestoreArray1d(Vec,PetscInt,PetscInt,PetscScalar *[]); 433ab360428SBarry Smith 4340c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecPlaceArray(Vec,const PetscScalar[]); 4350c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecResetArray(Vec); 4360c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecReplaceArray(Vec,const PetscScalar[]); 4370c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGetArrays(const Vec[],PetscInt,PetscScalar**[]); 4380c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecRestoreArrays(const Vec[],PetscInt,PetscScalar**[]); 43984cb2905SBarry Smith 4400c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecValid(Vec,PetscTruth*); 4410c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecView(Vec,PetscViewer); 4420c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecViewFromOptions(Vec, char *); 4430c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecEqual(Vec,Vec,PetscTruth*); 44453847eedSBarry Smith PetscPolymorphicFunction(VecEqual,(Vec x,Vec y),(x,y,&s),PetscTruth,s); 4450c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecLoad(PetscViewer,const VecType,Vec*); 4460c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecLoadIntoVector(PetscViewer,Vec); 4478ed539a5SBarry Smith 4480c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGetSize(Vec,PetscInt*); 44953847eedSBarry Smith PetscPolymorphicFunction(VecGetSize,(Vec x),(x,&s),PetscInt,s); 4500c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGetLocalSize(Vec,PetscInt*); 45153847eedSBarry Smith PetscPolymorphicFunction(VecGetLocalSize,(Vec x),(x,&s),PetscInt,s); 4520c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGetOwnershipRange(Vec,PetscInt*,PetscInt*); 4538ed539a5SBarry Smith 4540c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSetLocalToGlobalMapping(Vec,ISLocalToGlobalMapping); 4550c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSetValuesLocal(Vec,PetscInt,const PetscInt[],const PetscScalar[],InsertMode); 4560c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSetLocalToGlobalMappingBlock(Vec,ISLocalToGlobalMapping); 4570c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSetValuesBlockedLocal(Vec,PetscInt,const PetscInt[],const PetscScalar[],InsertMode); 45890f02eecSBarry Smith 4590c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecDotBegin(Vec,Vec,PetscScalar *); 460*0c451bc4SBarry Smith PetscPolymorphicSubroutine(VecDotBegin,(Vec x,Vec y),(x,y,PETSC_NULL)); 4610c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecDotEnd(Vec,Vec,PetscScalar *); 46253847eedSBarry Smith PetscPolymorphicFunction(VecDotEnd,(Vec x,Vec y),(x,y,&s),PetscScalar,s); 4630c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecTDotBegin(Vec,Vec,PetscScalar *); 464*0c451bc4SBarry Smith PetscPolymorphicSubroutine(VecTDotBegin,(Vec x,Vec y),(x,y,PETSC_NULL)); 4650c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecTDotEnd(Vec,Vec,PetscScalar *); 46653847eedSBarry Smith PetscPolymorphicFunction(VecTDotEnd,(Vec x,Vec y),(x,y,&s),PetscScalar,s); 4670c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecNormBegin(Vec,NormType,PetscReal *); 468*0c451bc4SBarry Smith PetscPolymorphicSubroutine(VecNormBegin,(Vec x,NormType t),(x,t,PETSC_NULL)); 469*0c451bc4SBarry Smith PetscPolymorphicSubroutine(VecNormBegin,(Vec x),(x,NORM_2,PETSC_NULL)); 4700c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecNormEnd(Vec,NormType,PetscReal *); 47153847eedSBarry Smith PetscPolymorphicFunction(VecNormEnd,(Vec x,NormType t),(x,t,&s),PetscReal,s); 47253847eedSBarry Smith PetscPolymorphicFunction(VecNormEnd,(Vec x),(x,NORM_2,&s),PetscReal,s); 473d3c178dbSBarry Smith 474fdbc4c26SBarry Smith typedef enum {VEC_IGNORE_OFF_PROC_ENTRIES,VEC_TREAT_OFF_PROC_ENTRIES} VecOption; 4750c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSetOption(Vec,VecOption); 47690f02eecSBarry Smith 477ebe3b25bSBarry Smith /* 478ebe3b25bSBarry Smith Expose VecGetArray()/VecRestoreArray() to users. Allows this to work without any function 479ebe3b25bSBarry Smith call overhead on any 'native' Vecs. 480ebe3b25bSBarry Smith */ 4813c94ec11SBarry Smith #include "vecimpl.h" 482ebe3b25bSBarry Smith 4830c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecContourScale(Vec,PetscReal,PetscReal); 484522c5e43SBarry Smith 48515091d37SBarry Smith /* 48615091d37SBarry Smith These numbers need to match the entries in 4873c94ec11SBarry Smith the function table in vecimpl.h 48815091d37SBarry Smith */ 489b1bcba4aSBarry Smith typedef enum { VECOP_VIEW = 32, 490b1bcba4aSBarry Smith VECOP_LOADINTOVECTOR = 38 49115091d37SBarry Smith } VecOperation; 4920c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecSetOperation(Vec,VecOperation,void(*)(void)); 493b19c1e4cSBarry Smith 494e182c471SBarry Smith /* 495e182c471SBarry Smith Routines for dealing with ghosted vectors: 496e182c471SBarry Smith vectors with ghost elements at the end of the array. 497e182c471SBarry Smith */ 4980c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecCreateGhost(MPI_Comm,PetscInt,PetscInt,PetscInt,const PetscInt[],Vec*); 4990c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecCreateGhostWithArray(MPI_Comm,PetscInt,PetscInt,PetscInt,const PetscInt[],const PetscScalar[],Vec*); 5000c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecCreateGhostBlock(MPI_Comm,PetscInt,PetscInt,PetscInt,PetscInt,const PetscInt[],Vec*); 5010c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecCreateGhostBlockWithArray(MPI_Comm,PetscInt,PetscInt,PetscInt,PetscInt,const PetscInt[],const PetscScalar[],Vec*); 5020c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGhostGetLocalForm(Vec,Vec*); 503*0c451bc4SBarry Smith PetscPolymorphicFunction(VecGhostGetLocalForm,(Vec x),(x,&s),Vec,s); 5040c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGhostRestoreLocalForm(Vec,Vec*); 5050c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGhostUpdateBegin(Vec,InsertMode,ScatterMode); 5060c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGhostUpdateEnd(Vec,InsertMode,ScatterMode); 507e182c471SBarry Smith 5080c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecConjugate(Vec); 50934233285SBarry Smith 5100c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecScatterCreateToAll(Vec,VecScatter*,Vec*); 5110c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecScatterCreateToZero(Vec,VecScatter*,Vec*); 512bba1ac68SSatish Balay 5130c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT PetscViewerMathematicaGetVector(PetscViewer, Vec); 5140c735eedSKris Buschelman EXTERN PetscErrorCode PETSCVEC_DLLEXPORT PetscViewerMathematicaPutVector(PetscViewer, Vec); 5157dbadf16SMatthew Knepley 516d59c15a7SBarry Smith /*S 517d59c15a7SBarry Smith Vecs - Collection of vectors where the data for the vectors is stored in 518d59c15a7SBarry Smith one continquous memory 519d59c15a7SBarry Smith 520d59c15a7SBarry Smith Level: advanced 521d59c15a7SBarry Smith 522d59c15a7SBarry Smith Notes: 523d59c15a7SBarry Smith Temporary construct for handling multiply right hand side solves 524d59c15a7SBarry Smith 525d59c15a7SBarry Smith This is faked by storing a single vector that has enough array space for 526d59c15a7SBarry Smith n vectors 527d59c15a7SBarry Smith 528d59c15a7SBarry Smith Concepts: parallel decomposition 529d59c15a7SBarry Smith 530d59c15a7SBarry Smith S*/ 53132dcc486SBarry Smith struct _p_Vecs {PetscInt n; Vec v;}; 532d59c15a7SBarry Smith typedef struct _p_Vecs* Vecs; 533d59c15a7SBarry Smith #define VecsDestroy(x) (VecDestroy((x)->v) || PetscFree(x)) 534d59c15a7SBarry Smith #define VecsCreateSeq(comm,p,m,x) (PetscNew(struct _p_Vecs,x) || VecCreateSeq(comm,p*m,&(*(x))->v) || (-1 == ((*(x))->n = (m)))) 535d59c15a7SBarry Smith #define VecsCreateSeqWithArray(comm,p,m,a,x) (PetscNew(struct _p_Vecs,x) || VecCreateSeqWithArray(comm,p*m,a,&(*(x))->v) || (-1 == ((*(x))->n = (m)))) 536d59c15a7SBarry Smith #define VecsDuplicate(x,y) (PetscNew(struct _p_Vecs,y) || VecDuplicate(x->v,&(*(y))->v) || (-1 == ((*(y))->n = (x)->n))) 537e9fa29b7SSatish Balay 538e9fa29b7SSatish Balay 539e9fa29b7SSatish Balay PETSC_EXTERN_CXX_END 5402eac72dbSBarry Smith #endif 541