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 141*9b250c83SBarry Smith /*MC 142*9b250c83SBarry Smith NORM_1 - the one norm, ||v|| = sum_i | v_i |. ||A|| = max_j || v_*j ||, maximum column sum 143*9b250c83SBarry Smith 144*9b250c83SBarry Smith Level: beginner 145*9b250c83SBarry Smith 146*9b250c83SBarry Smith .seealso: NormType, MatNorm(), VecNorm(), VecNormBegin(), VecNormEnd(), NORM_2, NORM_FROBENIUS, 147*9b250c83SBarry Smith NORM_INFINITY, NORM_1_AND_2 148*9b250c83SBarry Smith 149*9b250c83SBarry Smith M*/ 150*9b250c83SBarry Smith 151*9b250c83SBarry Smith /*MC 152*9b250c83SBarry Smith NORM_2 - the two norm, ||v|| = sqrt(sum_i (v_i)^2) (vectors only) 153*9b250c83SBarry Smith 154*9b250c83SBarry Smith Level: beginner 155*9b250c83SBarry Smith 156*9b250c83SBarry Smith .seealso: NormType, MatNorm(), VecNorm(), VecNormBegin(), VecNormEnd(), NORM_1, NORM_FROBENIUS, 157*9b250c83SBarry Smith NORM_INFINITY, NORM_1_AND_2 158*9b250c83SBarry Smith 159*9b250c83SBarry Smith M*/ 160*9b250c83SBarry Smith 161*9b250c83SBarry Smith /*MC 162*9b250c83SBarry Smith NORM_FROBENIUS - ||A|| = sqrt(sum_ij (A_ij)^2), same as NORM_2 for vectors 163*9b250c83SBarry Smith 164*9b250c83SBarry Smith Level: beginner 165*9b250c83SBarry Smith 166*9b250c83SBarry Smith .seealso: NormType, MatNorm(), VecNorm(), VecNormBegin(), VecNormEnd(), NORM_1, NORM_2, 167*9b250c83SBarry Smith NORM_INFINITY, NORM_1_AND_2 168*9b250c83SBarry Smith 169*9b250c83SBarry Smith M*/ 170*9b250c83SBarry Smith 171*9b250c83SBarry Smith /*MC 172*9b250c83SBarry Smith NORM_INFINITY - ||v|| = max_i |v_i|. ||A|| = max_i || v_i* ||, maximum row sum 173*9b250c83SBarry Smith 174*9b250c83SBarry Smith Level: beginner 175*9b250c83SBarry Smith 176*9b250c83SBarry Smith .seealso: NormType, MatNorm(), VecNorm(), VecNormBegin(), VecNormEnd(), NORM_1, NORM_2, 177*9b250c83SBarry Smith NORM_FROBINIUS, NORM_1_AND_2 178*9b250c83SBarry Smith 179*9b250c83SBarry Smith M*/ 180*9b250c83SBarry Smith 181*9b250c83SBarry Smith /*MC 182*9b250c83SBarry Smith NORM_1_AND_2 - computes both the 1 and 2 norm of a vector 183*9b250c83SBarry Smith 184*9b250c83SBarry Smith Level: beginner 185*9b250c83SBarry Smith 186*9b250c83SBarry Smith .seealso: NormType, MatNorm(), VecNorm(), VecNormBegin(), VecNormEnd(), NORM_1, NORM_2, 187*9b250c83SBarry Smith NORM_FROBINIUS, NORM_INFINITY 188*9b250c83SBarry Smith 189*9b250c83SBarry Smith M*/ 190*9b250c83SBarry Smith 191*9b250c83SBarry Smith /*MC 192*9b250c83SBarry Smith NORM_MAX - see NORM_INFINITY 193*9b250c83SBarry Smith 194*9b250c83SBarry Smith M*/ 195*9b250c83SBarry Smith 196b0a32e0cSBarry Smith EXTERN int VecNorm(Vec,NormType,PetscReal *); 19773ff66d1Svictorle EXTERN int VecNormComposedDataID(NormType,int*); 1987bdeda15SDinesh Kaushik EXTERN int VecNormalize(Vec,PetscReal *); 19987828ca2SBarry Smith EXTERN int VecSum(Vec,PetscScalar*); 200b0a32e0cSBarry Smith EXTERN int VecMax(Vec,int*,PetscReal *); 201b0a32e0cSBarry Smith EXTERN int VecMin(Vec,int*,PetscReal *); 202ea709b57SSatish Balay EXTERN int VecScale(const PetscScalar *a,Vec v); 203ca44d042SBarry Smith EXTERN int VecCopy(Vec,Vec); 204ca44d042SBarry Smith EXTERN int VecSetRandom(PetscRandom,Vec); 205ea709b57SSatish Balay EXTERN int VecSet(const PetscScalar*,Vec); 206ca44d042SBarry Smith EXTERN int VecSwap(Vec,Vec); 207ea709b57SSatish Balay EXTERN int VecAXPY(const PetscScalar*,Vec,Vec); 208ea709b57SSatish Balay EXTERN int VecAXPBY(const PetscScalar*,const PetscScalar *,Vec,Vec); 209ea709b57SSatish Balay EXTERN int VecMAXPY(int,const PetscScalar*,Vec,Vec*); 210ea709b57SSatish Balay EXTERN int VecAYPX(const PetscScalar*,Vec,Vec); 211ea709b57SSatish Balay EXTERN int VecWAXPY(const PetscScalar*,Vec,Vec,Vec); 212ca44d042SBarry Smith EXTERN int VecPointwiseMult(Vec,Vec,Vec); 213ca44d042SBarry Smith EXTERN int VecPointwiseDivide(Vec,Vec,Vec); 214b10e564cSKris Buschelman EXTERN int VecMaxPointwiseDivide(Vec,Vec,PetscReal*); 215ea709b57SSatish Balay EXTERN int VecShift(const PetscScalar*,Vec); 216ca44d042SBarry Smith EXTERN int VecReciprocal(Vec); 217deeb6e72SMatthew Knepley EXTERN int VecPermute(Vec, IS, PetscTruth); 218deeb6e72SMatthew Knepley EXTERN int VecSqrt(Vec); 219ca44d042SBarry Smith EXTERN int VecAbs(Vec); 220ca44d042SBarry Smith EXTERN int VecDuplicate(Vec,Vec*); 221ca44d042SBarry Smith EXTERN int VecDuplicateVecs(Vec,int,Vec*[]); 222ca44d042SBarry Smith EXTERN int VecDestroyVecs(const Vec[],int); 2238a124369SBarry Smith EXTERN int VecGetPetscMap(Vec,PetscMap*); 2242eac72dbSBarry Smith 225147746d1SBarry Smith EXTERN int VecStrideNormAll(Vec,NormType,PetscReal*); 226147746d1SBarry Smith EXTERN int VecStrideMaxAll(Vec,int *,PetscReal *); 227147746d1SBarry Smith EXTERN int VecStrideMinAll(Vec,int *,PetscReal *); 228147746d1SBarry Smith EXTERN int VecStrideScaleAll(Vec,PetscScalar*); 2294a560884SBarry Smith 23087828ca2SBarry Smith EXTERN int VecStrideNorm(Vec,int,NormType,PetscReal*); 23187828ca2SBarry Smith EXTERN int VecStrideMax(Vec,int,int *,PetscReal *); 23287828ca2SBarry Smith EXTERN int VecStrideMin(Vec,int,int *,PetscReal *); 2334a560884SBarry Smith EXTERN int VecStrideScale(Vec,int,PetscScalar*); 2344a560884SBarry Smith EXTERN int VecStrideGather(Vec,int,Vec,InsertMode); 2354a560884SBarry Smith EXTERN int VecStrideScatter(Vec,int,Vec,InsertMode); 236ca44d042SBarry Smith EXTERN int VecStrideGatherAll(Vec,Vec*,InsertMode); 237ca44d042SBarry Smith EXTERN int VecStrideScatterAll(Vec*,Vec,InsertMode); 238d2655a18SBarry Smith 239ea709b57SSatish Balay EXTERN int VecSetValues(Vec,int,const int[],const PetscScalar[],InsertMode); 240ca44d042SBarry Smith EXTERN int VecAssemblyBegin(Vec); 241ca44d042SBarry Smith EXTERN int VecAssemblyEnd(Vec); 2421ecfd215SBarry Smith EXTERN int VecStashSetInitialSize(Vec,int,int); 243b0a32e0cSBarry Smith EXTERN int VecStashView(Vec,PetscViewer); 2441ecfd215SBarry Smith EXTERN int VecStashGetInfo(Vec,int*,int*,int*,int*); 24562dc5420SSatish Balay 2461d73ed98SBarry Smith extern int VecSetValue_Row; 2471d73ed98SBarry Smith extern PetscScalar VecSetValue_Value; 24830de9b25SBarry Smith /*MC 24930de9b25SBarry Smith VecSetValue - Set a single entry into a vector. 25030de9b25SBarry Smith 25130de9b25SBarry Smith Synopsis: 25230de9b25SBarry Smith int VecSetValue(Vec v,int row,PetscScalar value, InsertMode mode); 25330de9b25SBarry Smith 25430de9b25SBarry Smith Not Collective 25530de9b25SBarry Smith 25630de9b25SBarry Smith Input Parameters: 25730de9b25SBarry Smith + v - the vector 25830de9b25SBarry Smith . row - the row location of the entry 25930de9b25SBarry Smith . value - the value to insert 26030de9b25SBarry Smith - mode - either INSERT_VALUES or ADD_VALUES 26130de9b25SBarry Smith 26230de9b25SBarry Smith Notes: 26330de9b25SBarry Smith For efficiency one should use VecSetValues() and set several or 26430de9b25SBarry Smith many values simultaneously if possible. 26530de9b25SBarry Smith 2661d73ed98SBarry Smith These values may be cached, so VecAssemblyBegin() and VecAssemblyEnd() 2671d73ed98SBarry Smith MUST be called after all calls to VecSetValues() have been completed. 2681d73ed98SBarry Smith 2691d73ed98SBarry Smith VecSetValues() uses 0-based indices in Fortran as well as in C. 2701d73ed98SBarry Smith 2711d73ed98SBarry Smith Level: beginner 2721d73ed98SBarry Smith 2731d73ed98SBarry Smith .seealso: VecSetValues(), VecAssemblyBegin(), VecAssemblyEnd(), VecSetValuesBlockedLocal(), VecSetValueLocal() 2741d73ed98SBarry Smith M*/ 2751d73ed98SBarry Smith #define VecSetValue(v,i,va,mode) (VecSetValue_Row = i, VecSetValue_Value = va, VecSetValues(v,1,&VecSetValue_Row,&VecSetValue_Value,mode)) 2761d73ed98SBarry Smith 2771d73ed98SBarry Smith /*MC 2781d73ed98SBarry Smith VecSetValueLocal - Set a single entry into a vector using the local numbering 2791d73ed98SBarry Smith 2801d73ed98SBarry Smith Synopsis: 2811d73ed98SBarry Smith int VecSetValueLocal(Vec v,int row,PetscScalar value, InsertMode mode); 2821d73ed98SBarry Smith 2831d73ed98SBarry Smith Not Collective 2841d73ed98SBarry Smith 2851d73ed98SBarry Smith Input Parameters: 2861d73ed98SBarry Smith + v - the vector 2871d73ed98SBarry Smith . row - the row location of the entry 2881d73ed98SBarry Smith . value - the value to insert 2891d73ed98SBarry Smith - mode - either INSERT_VALUES or ADD_VALUES 2901d73ed98SBarry Smith 2911d73ed98SBarry Smith Notes: 2921d73ed98SBarry Smith For efficiency one should use VecSetValues() and set several or 2931d73ed98SBarry Smith many values simultaneously if possible. 29430de9b25SBarry Smith 29530de9b25SBarry Smith These values may be cached, so VecAssemblyBegin() and VecAssemblyEnd() 29630de9b25SBarry Smith MUST be called after all calls to VecSetValues() have been completed. 29730de9b25SBarry Smith 29830de9b25SBarry Smith VecSetValues() uses 0-based indices in Fortran as well as in C. 29930de9b25SBarry Smith 30030de9b25SBarry Smith Level: beginner 30130de9b25SBarry Smith 3021d73ed98SBarry Smith .seealso: VecSetValues(), VecAssemblyBegin(), VecAssemblyEnd(), VecSetValuesBlockedLocal(), VecSetValue() 30330de9b25SBarry Smith M*/ 3041d73ed98SBarry Smith #define VecSetValueLocal(v,i,va,mode) (VecSetValue_Row = i,VecSetValue_Value = va,VecSetValuesLocal(v,1,&VecSetValue_Row,&VecSetValue_Value,mode)) 30530de9b25SBarry Smith 306ca44d042SBarry Smith EXTERN int VecSetBlockSize(Vec,int); 307ca44d042SBarry Smith EXTERN int VecGetBlockSize(Vec,int*); 308ea709b57SSatish Balay EXTERN int VecSetValuesBlocked(Vec,int,const int[],const PetscScalar[],InsertMode); 3098ed539a5SBarry Smith 310fd487807SMatthew Knepley /* Dynamic creation and loading functions */ 311fd487807SMatthew Knepley extern PetscFList VecList; 312d772e1d7SMatthew Knepley extern PetscTruth VecRegisterAllCalled; 3130e33f6ddSBarry Smith EXTERN int VecSetType(Vec, const VecType); 314d772e1d7SMatthew Knepley EXTERN int VecGetType(Vec, VecType *); 315d772e1d7SMatthew Knepley EXTERN int VecRegister(const char[],const char[],const char[],int(*)(Vec)); 316d772e1d7SMatthew Knepley EXTERN int VecRegisterAll(const char []); 317d772e1d7SMatthew Knepley EXTERN int VecRegisterDestroy(void); 31830de9b25SBarry Smith 31930de9b25SBarry Smith /*MC 32030de9b25SBarry Smith VecRegisterDynamic - Adds a new vector component implementation 32130de9b25SBarry Smith 32230de9b25SBarry Smith Synopsis: 32330de9b25SBarry Smith VecRegisterDynamic(char *name, char *path, char *func_name, int (*create_func)(Vec)) 32430de9b25SBarry Smith 32530de9b25SBarry Smith Not Collective 32630de9b25SBarry Smith 32730de9b25SBarry Smith Input Parameters: 32830de9b25SBarry Smith + name - The name of a new user-defined creation routine 32930de9b25SBarry Smith . path - The path (either absolute or relative) of the library containing this routine 33030de9b25SBarry Smith . func_name - The name of routine to create method context 33130de9b25SBarry Smith - create_func - The creation routine itself 33230de9b25SBarry Smith 33330de9b25SBarry Smith Notes: 33430de9b25SBarry Smith VecRegisterDynamic() may be called multiple times to add several user-defined vectors 33530de9b25SBarry Smith 33630de9b25SBarry Smith If dynamic libraries are used, then the fourth input argument (routine_create) is ignored. 33730de9b25SBarry Smith 33830de9b25SBarry Smith Sample usage: 33930de9b25SBarry Smith .vb 34030de9b25SBarry Smith VecRegisterDynamic("my_vec","/home/username/my_lib/lib/libO/solaris/libmy.a", "MyVectorCreate", MyVectorCreate); 34130de9b25SBarry Smith .ve 34230de9b25SBarry Smith 34330de9b25SBarry Smith Then, your vector type can be chosen with the procedural interface via 34430de9b25SBarry Smith .vb 34530de9b25SBarry Smith VecCreate(MPI_Comm, Vec *); 34630de9b25SBarry Smith VecSetType(Vec,"my_vector_name"); 34730de9b25SBarry Smith .ve 34830de9b25SBarry Smith or at runtime via the option 34930de9b25SBarry Smith .vb 35030de9b25SBarry Smith -vec_type my_vector_name 35130de9b25SBarry Smith .ve 35230de9b25SBarry Smith 35330de9b25SBarry Smith Notes: $PETSC_ARCH and $BOPT occuring in pathname will be replaced with appropriate values. 35430de9b25SBarry Smith If your function is not being put into a shared library then use VecRegister() instead 35530de9b25SBarry Smith 35630de9b25SBarry Smith Level: advanced 35730de9b25SBarry Smith 35830de9b25SBarry Smith .keywords: Vec, register 35930de9b25SBarry Smith .seealso: VecRegisterAll(), VecRegisterDestroy(), VecRegister() 36030de9b25SBarry Smith M*/ 361aa482453SBarry Smith #if defined(PETSC_USE_DYNAMIC_LIBRARIES) 362f1af5d2fSBarry Smith #define VecRegisterDynamic(a,b,c,d) VecRegister(a,b,c,0) 36388d459dfSBarry Smith #else 364f1af5d2fSBarry Smith #define VecRegisterDynamic(a,b,c,d) VecRegister(a,b,c,d) 36588d459dfSBarry Smith #endif 36688d459dfSBarry Smith 36709321671SBarry Smith 368ca44d042SBarry Smith EXTERN int VecScatterCreate(Vec,IS,Vec,IS,VecScatter *); 369ca44d042SBarry Smith EXTERN int VecScatterPostRecvs(Vec,Vec,InsertMode,ScatterMode,VecScatter); 370ca44d042SBarry Smith EXTERN int VecScatterBegin(Vec,Vec,InsertMode,ScatterMode,VecScatter); 371ca44d042SBarry Smith EXTERN int VecScatterEnd(Vec,Vec,InsertMode,ScatterMode,VecScatter); 372ca44d042SBarry Smith EXTERN int VecScatterDestroy(VecScatter); 373ca44d042SBarry Smith EXTERN int VecScatterCopy(VecScatter,VecScatter *); 374b0a32e0cSBarry Smith EXTERN int VecScatterView(VecScatter,PetscViewer); 375ca44d042SBarry Smith EXTERN int VecScatterRemap(VecScatter,int *,int*); 3762195c698SBarry Smith 377cb5b572fSBarry Smith typedef enum {PIPELINE_DOWN=0,PIPELINE_UP=1} PipelineDirection; 378cb5b572fSBarry Smith typedef enum {PIPELINE_NONE=1,PIPELINE_SEQUENTIAL=2, 3798ea6152fSSatish Balay PIPELINE_REDBLACK=3,PIPELINE_MULTICOLOR=4} PipelineType; 380cb5b572fSBarry Smith 381cb5b572fSBarry Smith typedef struct _p_VecPipeline* VecPipeline; 382cb5b572fSBarry Smith 383ca44d042SBarry Smith EXTERN int VecPipelineCreate(MPI_Comm,Vec,IS,Vec,IS,VecPipeline *); 384ca44d042SBarry Smith EXTERN int VecPipelineSetType(VecPipeline,PipelineType,PetscObject); 385ca44d042SBarry Smith EXTERN int VecPipelineSetup(VecPipeline); 386ca44d042SBarry Smith EXTERN int VecPipelineBegin(Vec,Vec,InsertMode,ScatterMode,PipelineDirection,VecPipeline); 387ca44d042SBarry Smith EXTERN int VecPipelineEnd(Vec,Vec,InsertMode,ScatterMode,PipelineDirection,VecPipeline); 388b0a32e0cSBarry Smith EXTERN int VecPipelineView(VecPipeline,PetscViewer); 389ca44d042SBarry Smith EXTERN int VecPipelineDestroy(VecPipeline); 390cb5b572fSBarry Smith 391ebe3b25bSBarry Smith EXTERN int VecGetArray_Private(Vec,PetscScalar*[]); 392ebe3b25bSBarry Smith EXTERN int VecRestoreArray_Private(Vec,PetscScalar*[]); 39387828ca2SBarry Smith EXTERN int VecGetArray4d(Vec,int,int,int,int,int,int,int,int,PetscScalar****[]); 39487828ca2SBarry Smith EXTERN int VecRestoreArray4d(Vec,int,int,int,int,int,int,int,int,PetscScalar****[]); 39587828ca2SBarry Smith EXTERN int VecGetArray3d(Vec,int,int,int,int,int,int,PetscScalar***[]); 39687828ca2SBarry Smith EXTERN int VecRestoreArray3d(Vec,int,int,int,int,int,int,PetscScalar***[]); 39787828ca2SBarry Smith EXTERN int VecGetArray2d(Vec,int,int,int,int,PetscScalar**[]); 39887828ca2SBarry Smith EXTERN int VecRestoreArray2d(Vec,int,int,int,int,PetscScalar**[]); 39987828ca2SBarry Smith EXTERN int VecGetArray1d(Vec,int,int,PetscScalar *[]); 40087828ca2SBarry Smith EXTERN int VecRestoreArray1d(Vec,int,int,PetscScalar *[]); 401ab360428SBarry Smith 402ea709b57SSatish Balay EXTERN int VecPlaceArray(Vec,const PetscScalar[]); 403b0a32e0cSBarry Smith EXTERN int VecResetArray(Vec); 404ea709b57SSatish Balay EXTERN int VecReplaceArray(Vec,const PetscScalar[]); 40587828ca2SBarry Smith EXTERN int VecGetArrays(const Vec[],int,PetscScalar**[]); 40687828ca2SBarry Smith EXTERN int VecRestoreArrays(const Vec[],int,PetscScalar**[]); 40784cb2905SBarry Smith 408ca44d042SBarry Smith EXTERN int VecValid(Vec,PetscTruth*); 409b0a32e0cSBarry Smith EXTERN int VecView(Vec,PetscViewer); 41091d0cc33SMatthew Knepley EXTERN int VecViewFromOptions(Vec, char *); 411ca44d042SBarry Smith EXTERN int VecEqual(Vec,Vec,PetscTruth*); 4127425b172SBarry Smith EXTERN int VecLoad(PetscViewer,const VecType,Vec*); 413b0a32e0cSBarry Smith EXTERN int VecLoadIntoVector(PetscViewer,Vec); 4148ed539a5SBarry Smith 415ca44d042SBarry Smith EXTERN int VecGetSize(Vec,int*); 416ca44d042SBarry Smith EXTERN int VecGetLocalSize(Vec,int*); 417ca44d042SBarry Smith EXTERN int VecGetOwnershipRange(Vec,int*,int*); 4188ed539a5SBarry Smith 419ca44d042SBarry Smith EXTERN int VecSetLocalToGlobalMapping(Vec,ISLocalToGlobalMapping); 420ea709b57SSatish Balay EXTERN int VecSetValuesLocal(Vec,int,const int[],const PetscScalar[],InsertMode); 421323b833fSBarry Smith EXTERN int VecSetLocalToGlobalMappingBlock(Vec,ISLocalToGlobalMapping); 422ea709b57SSatish Balay EXTERN int VecSetValuesBlockedLocal(Vec,int,const int[],const PetscScalar[],InsertMode); 42390f02eecSBarry Smith 42487828ca2SBarry Smith EXTERN int VecDotBegin(Vec,Vec,PetscScalar *); 42587828ca2SBarry Smith EXTERN int VecDotEnd(Vec,Vec,PetscScalar *); 42687828ca2SBarry Smith EXTERN int VecTDotBegin(Vec,Vec,PetscScalar *); 42787828ca2SBarry Smith EXTERN int VecTDotEnd(Vec,Vec,PetscScalar *); 42887828ca2SBarry Smith EXTERN int VecNormBegin(Vec,NormType,PetscReal *); 42987828ca2SBarry Smith EXTERN int VecNormEnd(Vec,NormType,PetscReal *); 430d3c178dbSBarry Smith 431fdbc4c26SBarry Smith typedef enum {VEC_IGNORE_OFF_PROC_ENTRIES,VEC_TREAT_OFF_PROC_ENTRIES} VecOption; 432ca44d042SBarry Smith EXTERN int VecSetOption(Vec,VecOption); 43390f02eecSBarry Smith 434ebe3b25bSBarry Smith /* 435ebe3b25bSBarry Smith Expose VecGetArray()/VecRestoreArray() to users. Allows this to work without any function 436ebe3b25bSBarry Smith call overhead on any 'native' Vecs. 437ebe3b25bSBarry Smith */ 4383c94ec11SBarry Smith #include "vecimpl.h" 439ebe3b25bSBarry Smith 44087828ca2SBarry Smith EXTERN int VecContourScale(Vec,PetscReal,PetscReal); 441522c5e43SBarry Smith 44215091d37SBarry Smith /* 44315091d37SBarry Smith These numbers need to match the entries in 4443c94ec11SBarry Smith the function table in vecimpl.h 44515091d37SBarry Smith */ 446b1bcba4aSBarry Smith typedef enum { VECOP_VIEW = 32, 447b1bcba4aSBarry Smith VECOP_LOADINTOVECTOR = 38 44815091d37SBarry Smith } VecOperation; 449c134de8dSSatish Balay EXTERN int VecSetOperation(Vec,VecOperation,void(*)(void)); 450b19c1e4cSBarry Smith 451e182c471SBarry Smith /* 452e182c471SBarry Smith Routines for dealing with ghosted vectors: 453e182c471SBarry Smith vectors with ghost elements at the end of the array. 454e182c471SBarry Smith */ 455ca44d042SBarry Smith EXTERN int VecCreateGhost(MPI_Comm,int,int,int,const int[],Vec*); 456ea709b57SSatish Balay EXTERN int VecCreateGhostWithArray(MPI_Comm,int,int,int,const int[],const PetscScalar[],Vec*); 457ca44d042SBarry Smith EXTERN int VecCreateGhostBlock(MPI_Comm,int,int,int,int,const int[],Vec*); 458ea709b57SSatish Balay EXTERN int VecCreateGhostBlockWithArray(MPI_Comm,int,int,int,int,const int[],const PetscScalar[],Vec*); 459ca44d042SBarry Smith EXTERN int VecGhostGetLocalForm(Vec,Vec*); 460ca44d042SBarry Smith EXTERN int VecGhostRestoreLocalForm(Vec,Vec*); 461ca44d042SBarry Smith EXTERN int VecGhostUpdateBegin(Vec,InsertMode,ScatterMode); 462ca44d042SBarry Smith EXTERN int VecGhostUpdateEnd(Vec,InsertMode,ScatterMode); 463e182c471SBarry Smith 4647b200f87SKris Buschelman EXTERN int VecConjugate(Vec); 46534233285SBarry Smith 466bba1ac68SSatish Balay EXTERN int VecConvertMPIToSeqAll(Vec vin,Vec *vout); 467bba1ac68SSatish Balay EXTERN int VecConvertMPIToMPIZero(Vec vin,Vec *vout); 468bba1ac68SSatish Balay 469bba1ac68SSatish Balay 4700e33f6ddSBarry Smith EXTERN int VecESISetType(Vec,const char*); 471bba1ac68SSatish Balay EXTERN int VecESISetFromOptions(Vec); 472bba1ac68SSatish Balay 4737dbadf16SMatthew Knepley EXTERN int PetscViewerMathematicaGetVector(PetscViewer, Vec); 4747dbadf16SMatthew Knepley EXTERN int PetscViewerMathematicaPutVector(PetscViewer, Vec); 4757dbadf16SMatthew Knepley 476d59c15a7SBarry Smith /*S 477d59c15a7SBarry Smith Vecs - Collection of vectors where the data for the vectors is stored in 478d59c15a7SBarry Smith one continquous memory 479d59c15a7SBarry Smith 480d59c15a7SBarry Smith Level: advanced 481d59c15a7SBarry Smith 482d59c15a7SBarry Smith Notes: 483d59c15a7SBarry Smith Temporary construct for handling multiply right hand side solves 484d59c15a7SBarry Smith 485d59c15a7SBarry Smith This is faked by storing a single vector that has enough array space for 486d59c15a7SBarry Smith n vectors 487d59c15a7SBarry Smith 488d59c15a7SBarry Smith Concepts: parallel decomposition 489d59c15a7SBarry Smith 490d59c15a7SBarry Smith S*/ 491d59c15a7SBarry Smith struct _p_Vecs {int n; Vec v;}; 492d59c15a7SBarry Smith typedef struct _p_Vecs* Vecs; 493d59c15a7SBarry Smith #define VecsDestroy(x) (VecDestroy((x)->v) || PetscFree(x)) 494d59c15a7SBarry Smith #define VecsCreateSeq(comm,p,m,x) (PetscNew(struct _p_Vecs,x) || VecCreateSeq(comm,p*m,&(*(x))->v) || (-1 == ((*(x))->n = (m)))) 495d59c15a7SBarry Smith #define VecsCreateSeqWithArray(comm,p,m,a,x) (PetscNew(struct _p_Vecs,x) || VecCreateSeqWithArray(comm,p*m,a,&(*(x))->v) || (-1 == ((*(x))->n = (m)))) 496d59c15a7SBarry Smith #define VecsDuplicate(x,y) (PetscNew(struct _p_Vecs,y) || VecDuplicate(x->v,&(*(y))->v) || (-1 == ((*(y))->n = (x)->n))) 497e9fa29b7SSatish Balay 498e9fa29b7SSatish Balay 499e9fa29b7SSatish Balay PETSC_EXTERN_CXX_END 5002eac72dbSBarry Smith #endif 501