173f4d377SMatthew Knepley /* $Id: petscvec.h,v 1.127 2001/09/11 16:31:30 bsmith Exp $ */ 22eac72dbSBarry Smith /* 337f753daSBarry Smith Defines the vector component of PETSc. Vectors generally represent 437f753daSBarry Smith degrees of freedom for finite element/finite difference functions 584cb2905SBarry Smith on a grid. They have more mathematical structure then simple arrays. 62eac72dbSBarry Smith */ 72eac72dbSBarry Smith 80a835dfdSSatish Balay #ifndef __PETSCVEC_H 90a835dfdSSatish Balay #define __PETSCVEC_H 100a835dfdSSatish Balay #include "petscis.h" 110a835dfdSSatish Balay #include "petscsys.h" 12e9fa29b7SSatish Balay PETSC_EXTERN_CXX_BEGIN 132eac72dbSBarry Smith 1409321671SBarry Smith /*S 158a124369SBarry Smith PetscMap - Abstract PETSc object that defines the layout of vector and 16013c094aSBarry Smith matrices across processors 1709321671SBarry Smith 1809321671SBarry Smith Level: advanced 1909321671SBarry Smith 2009321671SBarry Smith Notes: 2109321671SBarry Smith Does not play a role in the PETSc design, can be ignored 2209321671SBarry Smith 2309321671SBarry Smith Concepts: parallel decomposition 2409321671SBarry Smith 258a124369SBarry Smith .seealso: PetscMapCreateMPI() 2609321671SBarry Smith S*/ 278a124369SBarry Smith typedef struct _p_PetscMap* PetscMap; 2809321671SBarry Smith 29d772e1d7SMatthew Knepley #define MAP_SEQ "seq" 30d772e1d7SMatthew Knepley #define MAP_MPI "mpi" 3149773a63SBarry Smith #define PetscMapType char* 32d772e1d7SMatthew Knepley 33d772e1d7SMatthew Knepley /* Logging support */ 34d772e1d7SMatthew Knepley extern int MAP_COOKIE; 35d772e1d7SMatthew Knepley 36d772e1d7SMatthew Knepley EXTERN int PetscMapCreate(MPI_Comm,PetscMap*); 37d772e1d7SMatthew Knepley EXTERN int PetscMapCreateMPI(MPI_Comm,int,int,PetscMap*); 38d772e1d7SMatthew Knepley EXTERN int PetscMapSetFromOptions(PetscMap); 39d772e1d7SMatthew Knepley EXTERN int PetscMapPrintHelp(PetscMap); 40d772e1d7SMatthew Knepley EXTERN int PetscMapDestroy(PetscMap); 41d772e1d7SMatthew Knepley 42d772e1d7SMatthew Knepley EXTERN int PetscMapSetLocalSize(PetscMap,int); 43d772e1d7SMatthew Knepley EXTERN int PetscMapGetLocalSize(PetscMap,int *); 44d772e1d7SMatthew Knepley EXTERN int PetscMapSetSize(PetscMap,int); 45d772e1d7SMatthew Knepley EXTERN int PetscMapGetSize(PetscMap,int *); 46d772e1d7SMatthew Knepley EXTERN int PetscMapGetLocalRange(PetscMap,int *,int *); 47d772e1d7SMatthew Knepley EXTERN int PetscMapGetGlobalRange(PetscMap,int *[]); 48d772e1d7SMatthew Knepley 49d772e1d7SMatthew Knepley /* Dynamic creation and loading functions */ 50d772e1d7SMatthew Knepley extern PetscFList PetscMapList; 51d772e1d7SMatthew Knepley extern PetscTruth PetscMapRegisterAllCalled; 520e33f6ddSBarry Smith EXTERN int PetscMapSetType(PetscMap, const PetscMapType); 53d772e1d7SMatthew Knepley EXTERN int PetscMapGetType(PetscMap, PetscMapType *); 54d772e1d7SMatthew Knepley EXTERN int PetscMapRegister(const char[],const char[],const char[],int(*)(PetscMap)); 55d772e1d7SMatthew Knepley EXTERN int PetscMapRegisterAll(const char []); 56d772e1d7SMatthew Knepley EXTERN int PetscMapRegisterDestroy(void); 57d772e1d7SMatthew Knepley #if defined(PETSC_USE_DYNAMIC_LIBRARIES) 58d772e1d7SMatthew Knepley #define PetscMapRegisterDynamic(a,b,c,d) PetscMapRegister(a,b,c,0) 59d772e1d7SMatthew Knepley #else 60d772e1d7SMatthew Knepley #define PetscMapRegisterDynamic(a,b,c,d) PetscMapRegister(a,b,c,d) 61d772e1d7SMatthew Knepley #endif 62d772e1d7SMatthew Knepley 6309321671SBarry Smith /*S 6409321671SBarry Smith Vec - Abstract PETSc vector object 6509321671SBarry Smith 6609321671SBarry Smith Level: beginner 6709321671SBarry Smith 6809321671SBarry Smith Concepts: field variables, unknowns, arrays 6909321671SBarry Smith 7009321671SBarry Smith .seealso: VecCreate(), VecType, VecSetType() 7109321671SBarry Smith S*/ 72f09e8eb9SSatish Balay typedef struct _p_Vec* Vec; 7309321671SBarry Smith 7409321671SBarry Smith /*S 7509321671SBarry Smith VecScatter - Object used to manage communication of data 7609321671SBarry Smith between vectors in parallel. Manages both scatters and gathers 7709321671SBarry Smith 7809321671SBarry Smith Level: beginner 7909321671SBarry Smith 8009321671SBarry Smith Concepts: scatter 8109321671SBarry Smith 8209321671SBarry Smith .seealso: VecScatterCreate(), VecScatterBegin(), VecScatterEnd() 8309321671SBarry Smith S*/ 84f09e8eb9SSatish Balay typedef struct _p_VecScatter* VecScatter; 8509321671SBarry Smith 8609321671SBarry Smith /*E 8709321671SBarry Smith VecType - String with the name of a PETSc vector or the creation function 8809321671SBarry Smith with an optional dynamic library name, for example 8909321671SBarry Smith http://www.mcs.anl.gov/petsc/lib.a:myveccreate() 9009321671SBarry Smith 9109321671SBarry Smith Level: beginner 9209321671SBarry Smith 9309321671SBarry Smith .seealso: VecSetType(), Vec 9409321671SBarry Smith E*/ 950676abe4SMatthew Knepley #define VECSEQ "seq" 960676abe4SMatthew Knepley #define VECMPI "mpi" 970676abe4SMatthew Knepley #define VECFETI "feti" 980676abe4SMatthew Knepley #define VECSHARED "shared" 990676abe4SMatthew Knepley #define VECESI "esi" 1000676abe4SMatthew Knepley #define VECPETSCESI "petscesi" 10149773a63SBarry Smith #define VecType char* 1022eac72dbSBarry Smith 103fd487807SMatthew Knepley /* Logging support */ 104552e946dSBarry Smith #define VEC_FILE_COOKIE 1211214 1058ba1e511SMatthew Knepley extern int VEC_COOKIE; 106fd487807SMatthew Knepley extern int VEC_SCATTER_COOKIE; 107d5ba7fb7SMatthew Knepley extern int VEC_View, VEC_Max, VEC_Min, VEC_DotBarrier, VEC_Dot, VEC_MDotBarrier, VEC_MDot, VEC_TDot, VEC_MTDot, VEC_NormBarrier; 1087bdeda15SDinesh Kaushik extern int VEC_Norm, VEC_Normalize, VEC_Scale, VEC_Copy, VEC_Set, VEC_AXPY, VEC_AYPX, VEC_WAXPY, VEC_MAXPY, VEC_Swap, VEC_AssemblyBegin; 109d5ba7fb7SMatthew Knepley extern int VEC_AssemblyEnd, VEC_PointwiseMult, VEC_SetValues, VEC_Load, VEC_ScatterBarrier, VEC_ScatterBegin, VEC_ScatterEnd; 110d5ba7fb7SMatthew Knepley extern int VEC_SetRandom, VEC_ReduceArithmetic, VEC_ReduceBarrier, VEC_ReduceCommunication; 1118ba1e511SMatthew Knepley 1128ba1e511SMatthew Knepley EXTERN int VecInitializePackage(char *); 113fd487807SMatthew Knepley 114d772e1d7SMatthew Knepley EXTERN int VecCreate(MPI_Comm,Vec *); 115ca44d042SBarry Smith EXTERN int VecCreateSeq(MPI_Comm,int,Vec*); 116ca44d042SBarry Smith EXTERN int VecCreateMPI(MPI_Comm,int,int,Vec*); 117ea709b57SSatish Balay EXTERN int VecCreateSeqWithArray(MPI_Comm,int,const PetscScalar[],Vec*); 118ea709b57SSatish Balay EXTERN int VecCreateMPIWithArray(MPI_Comm,int,int,const PetscScalar[],Vec*); 119ca44d042SBarry Smith EXTERN int VecCreateShared(MPI_Comm,int,int,Vec*); 120ca44d042SBarry Smith EXTERN int VecSetFromOptions(Vec); 121fd487807SMatthew Knepley EXTERN int VecPrintHelp(Vec); 122ca44d042SBarry Smith EXTERN int VecDestroy(Vec); 1234b0e389bSBarry Smith 1247097b907SMatthew Knepley EXTERN int VecSetSizes(Vec,int,int); 125fd487807SMatthew Knepley 12687828ca2SBarry Smith EXTERN int VecDot(Vec,Vec,PetscScalar*); 12787828ca2SBarry Smith EXTERN int VecTDot(Vec,Vec,PetscScalar*); 12887828ca2SBarry Smith EXTERN int VecMDot(int,Vec,const Vec[],PetscScalar*); 12987828ca2SBarry Smith EXTERN int VecMTDot(int,Vec,const Vec[],PetscScalar*); 130cddf8d76SBarry Smith 13109321671SBarry Smith /*E 13209321671SBarry Smith NormType - determines what type of norm to compute 13309321671SBarry Smith 13409321671SBarry Smith Level: beginner 13509321671SBarry Smith 13609321671SBarry Smith .seealso: VecNorm(), VecNormBegin(), VecNormEnd(), MatNorm() 13709321671SBarry Smith E*/ 13893c39befSBarry Smith typedef enum {NORM_1=1,NORM_2=2,NORM_FROBENIUS=3,NORM_INFINITY=4,NORM_1_AND_2=5} NormType; 139cddf8d76SBarry Smith #define NORM_MAX NORM_INFINITY 14009321671SBarry Smith 141b0a32e0cSBarry Smith EXTERN int VecNorm(Vec,NormType,PetscReal *); 14273ff66d1Svictorle EXTERN int VecNormComposedDataID(NormType,int*); 1437bdeda15SDinesh Kaushik EXTERN int VecNormalize(Vec,PetscReal *); 14487828ca2SBarry Smith EXTERN int VecSum(Vec,PetscScalar*); 145b0a32e0cSBarry Smith EXTERN int VecMax(Vec,int*,PetscReal *); 146b0a32e0cSBarry Smith EXTERN int VecMin(Vec,int*,PetscReal *); 147ea709b57SSatish Balay EXTERN int VecScale(const PetscScalar *a,Vec v); 148ca44d042SBarry Smith EXTERN int VecCopy(Vec,Vec); 149ca44d042SBarry Smith EXTERN int VecSetRandom(PetscRandom,Vec); 150ea709b57SSatish Balay EXTERN int VecSet(const PetscScalar*,Vec); 151ca44d042SBarry Smith EXTERN int VecSwap(Vec,Vec); 152ea709b57SSatish Balay EXTERN int VecAXPY(const PetscScalar*,Vec,Vec); 153ea709b57SSatish Balay EXTERN int VecAXPBY(const PetscScalar*,const PetscScalar *,Vec,Vec); 154ea709b57SSatish Balay EXTERN int VecMAXPY(int,const PetscScalar*,Vec,Vec*); 155ea709b57SSatish Balay EXTERN int VecAYPX(const PetscScalar*,Vec,Vec); 156ea709b57SSatish Balay EXTERN int VecWAXPY(const PetscScalar*,Vec,Vec,Vec); 157ca44d042SBarry Smith EXTERN int VecPointwiseMult(Vec,Vec,Vec); 158ca44d042SBarry Smith EXTERN int VecPointwiseDivide(Vec,Vec,Vec); 159b10e564cSKris Buschelman EXTERN int VecMaxPointwiseDivide(Vec,Vec,PetscReal*); 160ea709b57SSatish Balay EXTERN int VecShift(const PetscScalar*,Vec); 161ca44d042SBarry Smith EXTERN int VecReciprocal(Vec); 162deeb6e72SMatthew Knepley EXTERN int VecPermute(Vec, IS, PetscTruth); 163deeb6e72SMatthew Knepley EXTERN int VecSqrt(Vec); 164ca44d042SBarry Smith EXTERN int VecAbs(Vec); 165ca44d042SBarry Smith EXTERN int VecDuplicate(Vec,Vec*); 166ca44d042SBarry Smith EXTERN int VecDuplicateVecs(Vec,int,Vec*[]); 167ca44d042SBarry Smith EXTERN int VecDestroyVecs(const Vec[],int); 1688a124369SBarry Smith EXTERN int VecGetPetscMap(Vec,PetscMap*); 1692eac72dbSBarry Smith 170147746d1SBarry Smith EXTERN int VecStrideNormAll(Vec,NormType,PetscReal*); 171147746d1SBarry Smith EXTERN int VecStrideMaxAll(Vec,int *,PetscReal *); 172147746d1SBarry Smith EXTERN int VecStrideMinAll(Vec,int *,PetscReal *); 173147746d1SBarry Smith EXTERN int VecStrideScaleAll(Vec,PetscScalar*); 1744a560884SBarry Smith 17587828ca2SBarry Smith EXTERN int VecStrideNorm(Vec,int,NormType,PetscReal*); 17687828ca2SBarry Smith EXTERN int VecStrideMax(Vec,int,int *,PetscReal *); 17787828ca2SBarry Smith EXTERN int VecStrideMin(Vec,int,int *,PetscReal *); 1784a560884SBarry Smith EXTERN int VecStrideScale(Vec,int,PetscScalar*); 1794a560884SBarry Smith EXTERN int VecStrideGather(Vec,int,Vec,InsertMode); 1804a560884SBarry Smith EXTERN int VecStrideScatter(Vec,int,Vec,InsertMode); 181ca44d042SBarry Smith EXTERN int VecStrideGatherAll(Vec,Vec*,InsertMode); 182ca44d042SBarry Smith EXTERN int VecStrideScatterAll(Vec*,Vec,InsertMode); 183d2655a18SBarry Smith 184ea709b57SSatish Balay EXTERN int VecSetValues(Vec,int,const int[],const PetscScalar[],InsertMode); 185ca44d042SBarry Smith EXTERN int VecAssemblyBegin(Vec); 186ca44d042SBarry Smith EXTERN int VecAssemblyEnd(Vec); 187*1ecfd215SBarry Smith EXTERN int VecStashSetInitialSize(Vec,int,int); 188b0a32e0cSBarry Smith EXTERN int VecStashView(Vec,PetscViewer); 189*1ecfd215SBarry Smith EXTERN int VecStashGetInfo(Vec,int*,int*,int*,int*); 19062dc5420SSatish Balay 1911d73ed98SBarry Smith extern int VecSetValue_Row; 1921d73ed98SBarry Smith extern PetscScalar VecSetValue_Value; 19330de9b25SBarry Smith /*MC 19430de9b25SBarry Smith VecSetValue - Set a single entry into a vector. 19530de9b25SBarry Smith 19630de9b25SBarry Smith Synopsis: 19730de9b25SBarry Smith int VecSetValue(Vec v,int row,PetscScalar value, InsertMode mode); 19830de9b25SBarry Smith 19930de9b25SBarry Smith Not Collective 20030de9b25SBarry Smith 20130de9b25SBarry Smith Input Parameters: 20230de9b25SBarry Smith + v - the vector 20330de9b25SBarry Smith . row - the row location of the entry 20430de9b25SBarry Smith . value - the value to insert 20530de9b25SBarry Smith - mode - either INSERT_VALUES or ADD_VALUES 20630de9b25SBarry Smith 20730de9b25SBarry Smith Notes: 20830de9b25SBarry Smith For efficiency one should use VecSetValues() and set several or 20930de9b25SBarry Smith many values simultaneously if possible. 21030de9b25SBarry Smith 2111d73ed98SBarry Smith These values may be cached, so VecAssemblyBegin() and VecAssemblyEnd() 2121d73ed98SBarry Smith MUST be called after all calls to VecSetValues() have been completed. 2131d73ed98SBarry Smith 2141d73ed98SBarry Smith VecSetValues() uses 0-based indices in Fortran as well as in C. 2151d73ed98SBarry Smith 2161d73ed98SBarry Smith Level: beginner 2171d73ed98SBarry Smith 2181d73ed98SBarry Smith .seealso: VecSetValues(), VecAssemblyBegin(), VecAssemblyEnd(), VecSetValuesBlockedLocal(), VecSetValueLocal() 2191d73ed98SBarry Smith M*/ 2201d73ed98SBarry Smith #define VecSetValue(v,i,va,mode) (VecSetValue_Row = i, VecSetValue_Value = va, VecSetValues(v,1,&VecSetValue_Row,&VecSetValue_Value,mode)) 2211d73ed98SBarry Smith 2221d73ed98SBarry Smith /*MC 2231d73ed98SBarry Smith VecSetValueLocal - Set a single entry into a vector using the local numbering 2241d73ed98SBarry Smith 2251d73ed98SBarry Smith Synopsis: 2261d73ed98SBarry Smith int VecSetValueLocal(Vec v,int row,PetscScalar value, InsertMode mode); 2271d73ed98SBarry Smith 2281d73ed98SBarry Smith Not Collective 2291d73ed98SBarry Smith 2301d73ed98SBarry Smith Input Parameters: 2311d73ed98SBarry Smith + v - the vector 2321d73ed98SBarry Smith . row - the row location of the entry 2331d73ed98SBarry Smith . value - the value to insert 2341d73ed98SBarry Smith - mode - either INSERT_VALUES or ADD_VALUES 2351d73ed98SBarry Smith 2361d73ed98SBarry Smith Notes: 2371d73ed98SBarry Smith For efficiency one should use VecSetValues() and set several or 2381d73ed98SBarry Smith many values simultaneously if possible. 23930de9b25SBarry Smith 24030de9b25SBarry Smith These values may be cached, so VecAssemblyBegin() and VecAssemblyEnd() 24130de9b25SBarry Smith MUST be called after all calls to VecSetValues() have been completed. 24230de9b25SBarry Smith 24330de9b25SBarry Smith VecSetValues() uses 0-based indices in Fortran as well as in C. 24430de9b25SBarry Smith 24530de9b25SBarry Smith Level: beginner 24630de9b25SBarry Smith 2471d73ed98SBarry Smith .seealso: VecSetValues(), VecAssemblyBegin(), VecAssemblyEnd(), VecSetValuesBlockedLocal(), VecSetValue() 24830de9b25SBarry Smith M*/ 2491d73ed98SBarry Smith #define VecSetValueLocal(v,i,va,mode) (VecSetValue_Row = i,VecSetValue_Value = va,VecSetValuesLocal(v,1,&VecSetValue_Row,&VecSetValue_Value,mode)) 25030de9b25SBarry Smith 251ca44d042SBarry Smith EXTERN int VecSetBlockSize(Vec,int); 252ca44d042SBarry Smith EXTERN int VecGetBlockSize(Vec,int*); 253ea709b57SSatish Balay EXTERN int VecSetValuesBlocked(Vec,int,const int[],const PetscScalar[],InsertMode); 2548ed539a5SBarry Smith 255fd487807SMatthew Knepley /* Dynamic creation and loading functions */ 256fd487807SMatthew Knepley extern PetscFList VecList; 257d772e1d7SMatthew Knepley extern PetscTruth VecRegisterAllCalled; 2580e33f6ddSBarry Smith EXTERN int VecSetType(Vec, const VecType); 259d772e1d7SMatthew Knepley EXTERN int VecGetType(Vec, VecType *); 260d772e1d7SMatthew Knepley EXTERN int VecRegister(const char[],const char[],const char[],int(*)(Vec)); 261d772e1d7SMatthew Knepley EXTERN int VecRegisterAll(const char []); 262d772e1d7SMatthew Knepley EXTERN int VecRegisterDestroy(void); 26330de9b25SBarry Smith 26430de9b25SBarry Smith /*MC 26530de9b25SBarry Smith VecRegisterDynamic - Adds a new vector component implementation 26630de9b25SBarry Smith 26730de9b25SBarry Smith Synopsis: 26830de9b25SBarry Smith VecRegisterDynamic(char *name, char *path, char *func_name, int (*create_func)(Vec)) 26930de9b25SBarry Smith 27030de9b25SBarry Smith Not Collective 27130de9b25SBarry Smith 27230de9b25SBarry Smith Input Parameters: 27330de9b25SBarry Smith + name - The name of a new user-defined creation routine 27430de9b25SBarry Smith . path - The path (either absolute or relative) of the library containing this routine 27530de9b25SBarry Smith . func_name - The name of routine to create method context 27630de9b25SBarry Smith - create_func - The creation routine itself 27730de9b25SBarry Smith 27830de9b25SBarry Smith Notes: 27930de9b25SBarry Smith VecRegisterDynamic() may be called multiple times to add several user-defined vectors 28030de9b25SBarry Smith 28130de9b25SBarry Smith If dynamic libraries are used, then the fourth input argument (routine_create) is ignored. 28230de9b25SBarry Smith 28330de9b25SBarry Smith Sample usage: 28430de9b25SBarry Smith .vb 28530de9b25SBarry Smith VecRegisterDynamic("my_vec","/home/username/my_lib/lib/libO/solaris/libmy.a", "MyVectorCreate", MyVectorCreate); 28630de9b25SBarry Smith .ve 28730de9b25SBarry Smith 28830de9b25SBarry Smith Then, your vector type can be chosen with the procedural interface via 28930de9b25SBarry Smith .vb 29030de9b25SBarry Smith VecCreate(MPI_Comm, Vec *); 29130de9b25SBarry Smith VecSetType(Vec,"my_vector_name"); 29230de9b25SBarry Smith .ve 29330de9b25SBarry Smith or at runtime via the option 29430de9b25SBarry Smith .vb 29530de9b25SBarry Smith -vec_type my_vector_name 29630de9b25SBarry Smith .ve 29730de9b25SBarry Smith 29830de9b25SBarry Smith Notes: $PETSC_ARCH and $BOPT occuring in pathname will be replaced with appropriate values. 29930de9b25SBarry Smith If your function is not being put into a shared library then use VecRegister() instead 30030de9b25SBarry Smith 30130de9b25SBarry Smith Level: advanced 30230de9b25SBarry Smith 30330de9b25SBarry Smith .keywords: Vec, register 30430de9b25SBarry Smith .seealso: VecRegisterAll(), VecRegisterDestroy(), VecRegister() 30530de9b25SBarry Smith M*/ 306aa482453SBarry Smith #if defined(PETSC_USE_DYNAMIC_LIBRARIES) 307f1af5d2fSBarry Smith #define VecRegisterDynamic(a,b,c,d) VecRegister(a,b,c,0) 30888d459dfSBarry Smith #else 309f1af5d2fSBarry Smith #define VecRegisterDynamic(a,b,c,d) VecRegister(a,b,c,d) 31088d459dfSBarry Smith #endif 31188d459dfSBarry Smith 31209321671SBarry Smith 313ca44d042SBarry Smith EXTERN int VecScatterCreate(Vec,IS,Vec,IS,VecScatter *); 314ca44d042SBarry Smith EXTERN int VecScatterPostRecvs(Vec,Vec,InsertMode,ScatterMode,VecScatter); 315ca44d042SBarry Smith EXTERN int VecScatterBegin(Vec,Vec,InsertMode,ScatterMode,VecScatter); 316ca44d042SBarry Smith EXTERN int VecScatterEnd(Vec,Vec,InsertMode,ScatterMode,VecScatter); 317ca44d042SBarry Smith EXTERN int VecScatterDestroy(VecScatter); 318ca44d042SBarry Smith EXTERN int VecScatterCopy(VecScatter,VecScatter *); 319b0a32e0cSBarry Smith EXTERN int VecScatterView(VecScatter,PetscViewer); 320ca44d042SBarry Smith EXTERN int VecScatterRemap(VecScatter,int *,int*); 3212195c698SBarry Smith 322cb5b572fSBarry Smith typedef enum {PIPELINE_DOWN=0,PIPELINE_UP=1} PipelineDirection; 323cb5b572fSBarry Smith typedef enum {PIPELINE_NONE=1,PIPELINE_SEQUENTIAL=2, 3248ea6152fSSatish Balay PIPELINE_REDBLACK=3,PIPELINE_MULTICOLOR=4} PipelineType; 325cb5b572fSBarry Smith 326cb5b572fSBarry Smith typedef struct _p_VecPipeline* VecPipeline; 327cb5b572fSBarry Smith 328ca44d042SBarry Smith EXTERN int VecPipelineCreate(MPI_Comm,Vec,IS,Vec,IS,VecPipeline *); 329ca44d042SBarry Smith EXTERN int VecPipelineSetType(VecPipeline,PipelineType,PetscObject); 330ca44d042SBarry Smith EXTERN int VecPipelineSetup(VecPipeline); 331ca44d042SBarry Smith EXTERN int VecPipelineBegin(Vec,Vec,InsertMode,ScatterMode,PipelineDirection,VecPipeline); 332ca44d042SBarry Smith EXTERN int VecPipelineEnd(Vec,Vec,InsertMode,ScatterMode,PipelineDirection,VecPipeline); 333b0a32e0cSBarry Smith EXTERN int VecPipelineView(VecPipeline,PetscViewer); 334ca44d042SBarry Smith EXTERN int VecPipelineDestroy(VecPipeline); 335cb5b572fSBarry Smith 336ebe3b25bSBarry Smith EXTERN int VecGetArray_Private(Vec,PetscScalar*[]); 337ebe3b25bSBarry Smith EXTERN int VecRestoreArray_Private(Vec,PetscScalar*[]); 33887828ca2SBarry Smith EXTERN int VecGetArray4d(Vec,int,int,int,int,int,int,int,int,PetscScalar****[]); 33987828ca2SBarry Smith EXTERN int VecRestoreArray4d(Vec,int,int,int,int,int,int,int,int,PetscScalar****[]); 34087828ca2SBarry Smith EXTERN int VecGetArray3d(Vec,int,int,int,int,int,int,PetscScalar***[]); 34187828ca2SBarry Smith EXTERN int VecRestoreArray3d(Vec,int,int,int,int,int,int,PetscScalar***[]); 34287828ca2SBarry Smith EXTERN int VecGetArray2d(Vec,int,int,int,int,PetscScalar**[]); 34387828ca2SBarry Smith EXTERN int VecRestoreArray2d(Vec,int,int,int,int,PetscScalar**[]); 34487828ca2SBarry Smith EXTERN int VecGetArray1d(Vec,int,int,PetscScalar *[]); 34587828ca2SBarry Smith EXTERN int VecRestoreArray1d(Vec,int,int,PetscScalar *[]); 346ab360428SBarry Smith 347ea709b57SSatish Balay EXTERN int VecPlaceArray(Vec,const PetscScalar[]); 348b0a32e0cSBarry Smith EXTERN int VecResetArray(Vec); 349ea709b57SSatish Balay EXTERN int VecReplaceArray(Vec,const PetscScalar[]); 35087828ca2SBarry Smith EXTERN int VecGetArrays(const Vec[],int,PetscScalar**[]); 35187828ca2SBarry Smith EXTERN int VecRestoreArrays(const Vec[],int,PetscScalar**[]); 35284cb2905SBarry Smith 353ca44d042SBarry Smith EXTERN int VecValid(Vec,PetscTruth*); 354b0a32e0cSBarry Smith EXTERN int VecView(Vec,PetscViewer); 35591d0cc33SMatthew Knepley EXTERN int VecViewFromOptions(Vec, char *); 356ca44d042SBarry Smith EXTERN int VecEqual(Vec,Vec,PetscTruth*); 3577425b172SBarry Smith EXTERN int VecLoad(PetscViewer,const VecType,Vec*); 358b0a32e0cSBarry Smith EXTERN int VecLoadIntoVector(PetscViewer,Vec); 3598ed539a5SBarry Smith 360ca44d042SBarry Smith EXTERN int VecGetSize(Vec,int*); 361ca44d042SBarry Smith EXTERN int VecGetLocalSize(Vec,int*); 362ca44d042SBarry Smith EXTERN int VecGetOwnershipRange(Vec,int*,int*); 3638ed539a5SBarry Smith 364ca44d042SBarry Smith EXTERN int VecSetLocalToGlobalMapping(Vec,ISLocalToGlobalMapping); 365ea709b57SSatish Balay EXTERN int VecSetValuesLocal(Vec,int,const int[],const PetscScalar[],InsertMode); 366323b833fSBarry Smith EXTERN int VecSetLocalToGlobalMappingBlock(Vec,ISLocalToGlobalMapping); 367ea709b57SSatish Balay EXTERN int VecSetValuesBlockedLocal(Vec,int,const int[],const PetscScalar[],InsertMode); 36890f02eecSBarry Smith 36987828ca2SBarry Smith EXTERN int VecDotBegin(Vec,Vec,PetscScalar *); 37087828ca2SBarry Smith EXTERN int VecDotEnd(Vec,Vec,PetscScalar *); 37187828ca2SBarry Smith EXTERN int VecTDotBegin(Vec,Vec,PetscScalar *); 37287828ca2SBarry Smith EXTERN int VecTDotEnd(Vec,Vec,PetscScalar *); 37387828ca2SBarry Smith EXTERN int VecNormBegin(Vec,NormType,PetscReal *); 37487828ca2SBarry Smith EXTERN int VecNormEnd(Vec,NormType,PetscReal *); 375d3c178dbSBarry Smith 376fdbc4c26SBarry Smith typedef enum {VEC_IGNORE_OFF_PROC_ENTRIES,VEC_TREAT_OFF_PROC_ENTRIES} VecOption; 377ca44d042SBarry Smith EXTERN int VecSetOption(Vec,VecOption); 37890f02eecSBarry Smith 379ebe3b25bSBarry Smith /* 380ebe3b25bSBarry Smith Expose VecGetArray()/VecRestoreArray() to users. Allows this to work without any function 381ebe3b25bSBarry Smith call overhead on any 'native' Vecs. 382ebe3b25bSBarry Smith */ 3833c94ec11SBarry Smith #include "vecimpl.h" 384ebe3b25bSBarry Smith 38587828ca2SBarry Smith EXTERN int VecContourScale(Vec,PetscReal,PetscReal); 386522c5e43SBarry Smith 38715091d37SBarry Smith /* 38815091d37SBarry Smith These numbers need to match the entries in 3893c94ec11SBarry Smith the function table in vecimpl.h 39015091d37SBarry Smith */ 391b1bcba4aSBarry Smith typedef enum { VECOP_VIEW = 32, 392b1bcba4aSBarry Smith VECOP_LOADINTOVECTOR = 38 39315091d37SBarry Smith } VecOperation; 394c134de8dSSatish Balay EXTERN int VecSetOperation(Vec,VecOperation,void(*)(void)); 395b19c1e4cSBarry Smith 396e182c471SBarry Smith /* 397e182c471SBarry Smith Routines for dealing with ghosted vectors: 398e182c471SBarry Smith vectors with ghost elements at the end of the array. 399e182c471SBarry Smith */ 400ca44d042SBarry Smith EXTERN int VecCreateGhost(MPI_Comm,int,int,int,const int[],Vec*); 401ea709b57SSatish Balay EXTERN int VecCreateGhostWithArray(MPI_Comm,int,int,int,const int[],const PetscScalar[],Vec*); 402ca44d042SBarry Smith EXTERN int VecCreateGhostBlock(MPI_Comm,int,int,int,int,const int[],Vec*); 403ea709b57SSatish Balay EXTERN int VecCreateGhostBlockWithArray(MPI_Comm,int,int,int,int,const int[],const PetscScalar[],Vec*); 404ca44d042SBarry Smith EXTERN int VecGhostGetLocalForm(Vec,Vec*); 405ca44d042SBarry Smith EXTERN int VecGhostRestoreLocalForm(Vec,Vec*); 406ca44d042SBarry Smith EXTERN int VecGhostUpdateBegin(Vec,InsertMode,ScatterMode); 407ca44d042SBarry Smith EXTERN int VecGhostUpdateEnd(Vec,InsertMode,ScatterMode); 408e182c471SBarry Smith 4097b200f87SKris Buschelman EXTERN int VecConjugate(Vec); 41034233285SBarry Smith 411bba1ac68SSatish Balay EXTERN int VecConvertMPIToSeqAll(Vec vin,Vec *vout); 412bba1ac68SSatish Balay EXTERN int VecConvertMPIToMPIZero(Vec vin,Vec *vout); 413bba1ac68SSatish Balay 414bba1ac68SSatish Balay 4150e33f6ddSBarry Smith EXTERN int VecESISetType(Vec,const char*); 416bba1ac68SSatish Balay EXTERN int VecESISetFromOptions(Vec); 417bba1ac68SSatish Balay 4187dbadf16SMatthew Knepley EXTERN int PetscViewerMathematicaGetVector(PetscViewer, Vec); 4197dbadf16SMatthew Knepley EXTERN int PetscViewerMathematicaPutVector(PetscViewer, Vec); 4207dbadf16SMatthew Knepley 421d59c15a7SBarry Smith /*S 422d59c15a7SBarry Smith Vecs - Collection of vectors where the data for the vectors is stored in 423d59c15a7SBarry Smith one continquous memory 424d59c15a7SBarry Smith 425d59c15a7SBarry Smith Level: advanced 426d59c15a7SBarry Smith 427d59c15a7SBarry Smith Notes: 428d59c15a7SBarry Smith Temporary construct for handling multiply right hand side solves 429d59c15a7SBarry Smith 430d59c15a7SBarry Smith This is faked by storing a single vector that has enough array space for 431d59c15a7SBarry Smith n vectors 432d59c15a7SBarry Smith 433d59c15a7SBarry Smith Concepts: parallel decomposition 434d59c15a7SBarry Smith 435d59c15a7SBarry Smith S*/ 436d59c15a7SBarry Smith struct _p_Vecs {int n; Vec v;}; 437d59c15a7SBarry Smith typedef struct _p_Vecs* Vecs; 438d59c15a7SBarry Smith #define VecsDestroy(x) (VecDestroy((x)->v) || PetscFree(x)) 439d59c15a7SBarry Smith #define VecsCreateSeq(comm,p,m,x) (PetscNew(struct _p_Vecs,x) || VecCreateSeq(comm,p*m,&(*(x))->v) || (-1 == ((*(x))->n = (m)))) 440d59c15a7SBarry Smith #define VecsCreateSeqWithArray(comm,p,m,a,x) (PetscNew(struct _p_Vecs,x) || VecCreateSeqWithArray(comm,p*m,a,&(*(x))->v) || (-1 == ((*(x))->n = (m)))) 441d59c15a7SBarry Smith #define VecsDuplicate(x,y) (PetscNew(struct _p_Vecs,y) || VecDuplicate(x->v,&(*(y))->v) || (-1 == ((*(y))->n = (x)->n))) 442e9fa29b7SSatish Balay 443e9fa29b7SSatish Balay 444e9fa29b7SSatish Balay PETSC_EXTERN_CXX_END 4452eac72dbSBarry Smith #endif 446