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