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 */ 66524c165SJacob Faibussowitsch #ifndef PETSCVEC_H 726bd1501SBarry Smith #define PETSCVEC_H 8ac09b921SBarry Smith 997929ea7SJunchao Zhang #include <petscsys.h> 1097929ea7SJunchao Zhang #include <petscsftypes.h> /* for VecScatter, VecScatterType */ 112c8e378dSBarry Smith #include <petscis.h> 12030f984aSJacob Faibussowitsch #include <petscdevicetypes.h> 13665c2dedSJed Brown #include <petscviewer.h> 142eac72dbSBarry Smith 15ac09b921SBarry Smith /* SUBMANSEC = Vec */ 16ac09b921SBarry Smith 1709321671SBarry Smith /*S 1809321671SBarry Smith Vec - Abstract PETSc vector object 1909321671SBarry Smith 2009321671SBarry Smith Level: beginner 2109321671SBarry Smith 22db781477SPatrick Sanan .seealso: `VecCreate()`, `VecType`, `VecSetType()` 2309321671SBarry Smith S*/ 24f09e8eb9SSatish Balay typedef struct _p_Vec *Vec; 2509321671SBarry Smith 2609321671SBarry Smith /*E 27398c84b2SBarry Smith ScatterMode - Determines the direction of a scatter 28398c84b2SBarry Smith 29398c84b2SBarry Smith Level: beginner 30398c84b2SBarry Smith 31db781477SPatrick Sanan .seealso: `VecScatter`, `VecScatterBegin()`, `VecScatterEnd()` 32398c84b2SBarry Smith E*/ 339371c9d4SSatish Balay typedef enum { 349371c9d4SSatish Balay SCATTER_FORWARD = 0, 359371c9d4SSatish Balay SCATTER_REVERSE = 1, 369371c9d4SSatish Balay SCATTER_FORWARD_LOCAL = 2, 379371c9d4SSatish Balay SCATTER_REVERSE_LOCAL = 3, 389371c9d4SSatish Balay SCATTER_LOCAL = 2 399371c9d4SSatish Balay } ScatterMode; 40398c84b2SBarry Smith 41398c84b2SBarry Smith /*MC 4287497f52SBarry Smith SCATTER_FORWARD - Scatters the values as dictated by the `VecScatterCreate()` call 43398c84b2SBarry Smith 44398c84b2SBarry Smith Level: beginner 45398c84b2SBarry Smith 46db781477SPatrick Sanan .seealso: `VecScatter`, `ScatterMode`, `VecScatterCreate()`, `VecScatterBegin()`, `VecScatterEnd()`, `SCATTER_REVERSE`, `SCATTER_FORWARD_LOCAL`, 47db781477SPatrick Sanan `SCATTER_REVERSE_LOCAL` 48398c84b2SBarry Smith 49398c84b2SBarry Smith M*/ 50398c84b2SBarry Smith 51398c84b2SBarry Smith /*MC 52398c84b2SBarry Smith SCATTER_REVERSE - Moves the values in the opposite direction then the directions indicated in 5387497f52SBarry Smith in the `VecScatterCreate()` 54398c84b2SBarry Smith 55398c84b2SBarry Smith Level: beginner 56398c84b2SBarry Smith 57db781477SPatrick Sanan .seealso: `VecScatter`, `ScatterMode`, `VecScatterCreate()`, `VecScatterBegin()`, `VecScatterEnd()`, `SCATTER_FORWARD`, `SCATTER_FORWARD_LOCAL`, 58db781477SPatrick Sanan `SCATTER_REVERSE_LOCAL` 59398c84b2SBarry Smith 60398c84b2SBarry Smith M*/ 61398c84b2SBarry Smith 62398c84b2SBarry Smith /*MC 6387497f52SBarry Smith SCATTER_FORWARD_LOCAL - Scatters the values as dictated by the `VecScatterCreate()` call except NO parallel communication 64398c84b2SBarry Smith is done. Any variables that have be moved between processes are ignored 65398c84b2SBarry Smith 66398c84b2SBarry Smith Level: developer 67398c84b2SBarry Smith 68db781477SPatrick Sanan .seealso: `VecScatter`, `ScatterMode`, `VecScatterCreate()`, `VecScatterBegin()`, `VecScatterEnd()`, `SCATTER_REVERSE`, `SCATTER_FORWARD`, 69db781477SPatrick Sanan `SCATTER_REVERSE_LOCAL` 70398c84b2SBarry Smith 71398c84b2SBarry Smith M*/ 72398c84b2SBarry Smith 73398c84b2SBarry Smith /*MC 74398c84b2SBarry Smith SCATTER_REVERSE_LOCAL - Moves the values in the opposite direction then the directions indicated in 7587497f52SBarry Smith in the `VecScatterCreate()` except NO parallel communication 76398c84b2SBarry Smith is done. Any variables that have be moved between processes are ignored 77398c84b2SBarry Smith 78398c84b2SBarry Smith Level: developer 79398c84b2SBarry Smith 80db781477SPatrick Sanan .seealso: `VecScatter`, `ScatterMode`, `VecScatterCreate()`, `VecScatterBegin()`, `VecScatterEnd()`, `SCATTER_FORWARD`, `SCATTER_FORWARD_LOCAL`, 81db781477SPatrick Sanan `SCATTER_REVERSE` 82398c84b2SBarry Smith 83398c84b2SBarry Smith M*/ 84398c84b2SBarry Smith 8576bdecfbSBarry Smith /*J 868f6c3df8SBarry Smith VecType - String with the name of a PETSc vector 8709321671SBarry Smith 8809321671SBarry Smith Level: beginner 8909321671SBarry Smith 90db781477SPatrick Sanan .seealso: `VecSetType()`, `Vec`, `VecCreate()`, `VecDestroy()` 9176bdecfbSBarry Smith J*/ 9219fd82e9SBarry Smith typedef const char *VecType; 930676abe4SMatthew Knepley #define VECSEQ "seq" 940676abe4SMatthew Knepley #define VECMPI "mpi" 95f48c50deSBarry Smith #define VECSTANDARD "standard" /* seq on one process and mpi on several */ 960676abe4SMatthew Knepley #define VECSHARED "shared" 97b17c682bSKarl Rupp #define VECSEQVIENNACL "seqviennacl" 98b17c682bSKarl Rupp #define VECMPIVIENNACL "mpiviennacl" 99b17c682bSKarl Rupp #define VECVIENNACL "viennacl" /* seqviennacl on one process and mpiviennacl on several */ 10082f73ecaSAlejandro Lamas Daviña #define VECSEQCUDA "seqcuda" 10182f73ecaSAlejandro Lamas Daviña #define VECMPICUDA "mpicuda" 10282f73ecaSAlejandro Lamas Daviña #define VECCUDA "cuda" /* seqcuda on one process and mpicuda on several */ 10359af0bd3SScott Kruger #define VECSEQHIP "seqhip" 10459af0bd3SScott Kruger #define VECMPIHIP "mpihip" 10559af0bd3SScott Kruger #define VECHIP "hip" /* seqcuda on one process and mpicuda on several */ 1061aae2881SJed Brown #define VECNEST "nest" 10710171e34SJunchao Zhang #define VECSEQKOKKOS "seqkokkos" 10810171e34SJunchao Zhang #define VECMPIKOKKOS "mpikokkos" 10910171e34SJunchao Zhang #define VECKOKKOS "kokkos" /* seqkokkos on one process and mpikokkos on several */ 1102eac72dbSBarry Smith 111803a1b88SHong Zhang /* Dynamic creation and loading functions */ 112803a1b88SHong Zhang PETSC_EXTERN PetscErrorCode VecScatterSetType(VecScatter, VecScatterType); 113803a1b88SHong Zhang PETSC_EXTERN PetscErrorCode VecScatterGetType(VecScatter, VecScatterType *); 114803a1b88SHong Zhang PETSC_EXTERN PetscErrorCode VecScatterSetFromOptions(VecScatter); 115803a1b88SHong Zhang PETSC_EXTERN PetscErrorCode VecScatterRegister(const char[], PetscErrorCode (*)(VecScatter)); 116130e142eSJunchao Zhang PETSC_EXTERN PetscErrorCode VecScatterCreate(Vec, IS, Vec, IS, VecScatter *); 1174b71561bSShri Abhyankar 118fd487807SMatthew Knepley /* Logging support */ 119450a797fSBarry Smith #define REAL_FILE_CLASSID 1211213 1200700a824SBarry Smith #define VEC_FILE_CLASSID 1211214 121014dd563SJed Brown PETSC_EXTERN PetscClassId VEC_CLASSID; 12297929ea7SJunchao Zhang PETSC_EXTERN PetscClassId PETSCSF_CLASSID; 12345b63f25SDmitry Karpeev 124607a6623SBarry Smith PETSC_EXTERN PetscErrorCode VecInitializePackage(void); 125014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecFinalizePackage(void); 126fd487807SMatthew Knepley 127014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecCreate(MPI_Comm, Vec *); 128014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecCreateSeq(MPI_Comm, PetscInt, Vec *); 129014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecCreateMPI(MPI_Comm, PetscInt, PetscInt, Vec *); 130014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecCreateSeqWithArray(MPI_Comm, PetscInt, PetscInt, const PetscScalar[], Vec *); 131014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecCreateMPIWithArray(MPI_Comm, PetscInt, PetscInt, PetscInt, const PetscScalar[], Vec *); 132014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecCreateShared(MPI_Comm, PetscInt, PetscInt, Vec *); 133803a1b88SHong Zhang PETSC_EXTERN PetscErrorCode VecCreateNode(MPI_Comm, PetscInt, PetscInt, Vec *); 134803a1b88SHong Zhang 135014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecSetFromOptions(Vec); 136fe2efc57SMark PETSC_EXTERN PetscErrorCode VecViewFromOptions(Vec, PetscObject, const char[]); 1370d2bece7SBarry Smith 138014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecSetUp(Vec); 139014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecDestroy(Vec *); 140014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecZeroEntries(Vec); 141014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecSetOptionsPrefix(Vec, const char[]); 142014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecAppendOptionsPrefix(Vec, const char[]); 143014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecGetOptionsPrefix(Vec, const char *[]); 144f69a0ea3SMatthew Knepley 145014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecSetSizes(Vec, PetscInt, PetscInt); 146fd487807SMatthew Knepley 14752b6e47cSBarry Smith PETSC_EXTERN PetscErrorCode VecDotNorm2(Vec, Vec, PetscScalar *, PetscReal *); 148014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecDot(Vec, Vec, PetscScalar *); 14967392de3SBarry Smith PETSC_EXTERN PetscErrorCode VecDotRealPart(Vec, Vec, PetscReal *); 150014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecTDot(Vec, Vec, PetscScalar *); 151014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecMDot(Vec, PetscInt, const Vec[], PetscScalar[]); 152014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecMTDot(Vec, PetscInt, const Vec[], PetscScalar[]); 153014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecGetSubVector(Vec, IS, Vec *); 154014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecRestoreSubVector(Vec, IS, Vec *); 155598f99faSAlp Dener PETSC_EXTERN PetscErrorCode VecConcatenate(PetscInt, const Vec[], Vec *, IS *[]); 156cddf8d76SBarry Smith 15709321671SBarry Smith /*E 15809321671SBarry Smith NormType - determines what type of norm to compute 15909321671SBarry Smith 16009321671SBarry Smith Level: beginner 16109321671SBarry Smith 162db781477SPatrick Sanan .seealso: `VecNorm()`, `VecNormBegin()`, `VecNormEnd()`, `MatNorm()` 16309321671SBarry Smith E*/ 1649371c9d4SSatish Balay typedef enum { 1659371c9d4SSatish Balay NORM_1 = 0, 166a873a8cdSSam Reynolds NORM_2 = 1, 167a873a8cdSSam Reynolds NORM_FROBENIUS = 2, 168a873a8cdSSam Reynolds NORM_INFINITY = 3, 169a873a8cdSSam Reynolds NORM_1_AND_2 = 4 170a873a8cdSSam Reynolds } NormType; 1716a6fc655SJed Brown PETSC_EXTERN const char *const NormTypes[]; 172cddf8d76SBarry Smith #define NORM_MAX NORM_INFINITY 17309321671SBarry Smith 1749b250c83SBarry Smith /*MC 1759b250c83SBarry Smith NORM_1 - the one norm, ||v|| = sum_i | v_i |. ||A|| = max_j || v_*j ||, maximum column sum 1769b250c83SBarry Smith 1779b250c83SBarry Smith Level: beginner 1789b250c83SBarry Smith 179db781477SPatrick Sanan .seealso: `NormType`, `MatNorm()`, `VecNorm()`, `VecNormBegin()`, `VecNormEnd()`, `NORM_2`, `NORM_FROBENIUS`, 180db781477SPatrick Sanan `NORM_INFINITY`, `NORM_1_AND_2` 1819b250c83SBarry Smith 1829b250c83SBarry Smith M*/ 1839b250c83SBarry Smith 1849b250c83SBarry Smith /*MC 185df54d55cSMatthias Liertzer NORM_2 - the two norm, ||v|| = sqrt(sum_i |v_i|^2) (vectors only) 1869b250c83SBarry Smith 1879b250c83SBarry Smith Level: beginner 1889b250c83SBarry Smith 189db781477SPatrick Sanan .seealso: `NormType`, `MatNorm()`, `VecNorm()`, `VecNormBegin()`, `VecNormEnd()`, `NORM_1`, `NORM_FROBENIUS`, 190db781477SPatrick Sanan `NORM_INFINITY`, `NORM_1_AND_2` 1919b250c83SBarry Smith 1929b250c83SBarry Smith M*/ 1939b250c83SBarry Smith 1949b250c83SBarry Smith /*MC 19587497f52SBarry Smith NORM_FROBENIUS - ||A|| = sqrt(sum_ij |A_ij|^2), same as `NORM_2` for vectors 1969b250c83SBarry Smith 1979b250c83SBarry Smith Level: beginner 1989b250c83SBarry Smith 199db781477SPatrick Sanan .seealso: `NormType`, `MatNorm()`, `VecNorm()`, `VecNormBegin()`, `VecNormEnd()`, `NORM_1`, `NORM_2`, 200db781477SPatrick Sanan `NORM_INFINITY`, `NORM_1_AND_2` 2019b250c83SBarry Smith 2029b250c83SBarry Smith M*/ 2039b250c83SBarry Smith 2049b250c83SBarry Smith /*MC 2059b250c83SBarry Smith NORM_INFINITY - ||v|| = max_i |v_i|. ||A|| = max_i || v_i* ||, maximum row sum 2069b250c83SBarry Smith 2079b250c83SBarry Smith Level: beginner 2089b250c83SBarry Smith 209db781477SPatrick Sanan .seealso: `NormType`, `MatNorm()`, `VecNorm()`, `VecNormBegin()`, `VecNormEnd()`, `NORM_1`, `NORM_2`, 210db781477SPatrick Sanan `NORM_FROBENIUS`, `NORM_1_AND_2` 2119b250c83SBarry Smith 2129b250c83SBarry Smith M*/ 2139b250c83SBarry Smith 2149b250c83SBarry Smith /*MC 2159b250c83SBarry Smith NORM_1_AND_2 - computes both the 1 and 2 norm of a vector 2169b250c83SBarry Smith 2179b250c83SBarry Smith Level: beginner 2189b250c83SBarry Smith 219db781477SPatrick Sanan .seealso: `NormType`, `MatNorm()`, `VecNorm()`, `VecNormBegin()`, `VecNormEnd()`, `NORM_1`, `NORM_2`, 220db781477SPatrick Sanan `NORM_FROBENIUS`, `NORM_INFINITY` 2219b250c83SBarry Smith 2229b250c83SBarry Smith M*/ 2239b250c83SBarry Smith 2249b250c83SBarry Smith /*MC 22587497f52SBarry Smith NORM_MAX - see `NORM_INFINITY` 2269b250c83SBarry Smith 227d41222bbSBarry Smith Level: beginner 228d41222bbSBarry Smith 2299b250c83SBarry Smith M*/ 2309b250c83SBarry Smith 231a873a8cdSSam Reynolds /*E 23287497f52SBarry Smith ReductionType - determines what type of column reduction (one that is not a type of norm defined in `NormType`) to compute 233a873a8cdSSam Reynolds 234a873a8cdSSam Reynolds Level: beginner 235a873a8cdSSam Reynolds 236db781477SPatrick Sanan .seealso: `MatGetColumnReductions()`, `MatGetColumnNorms()`, `NormType` 237a873a8cdSSam Reynolds E*/ 238857cbf51SRichard Tran Mills /* NOTE: The integer constants defined in ReductionType MUST BE DISTINCT from those defined in NormType. 239857cbf51SRichard Tran Mills * This is because MatGetColumnReductions() is used to compute both norms and other types of reductions, 240857cbf51SRichard Tran Mills * and the constants defined in both NormType and ReductionType are used to designate the desired operation. */ 2419371c9d4SSatish Balay typedef enum { 2429371c9d4SSatish Balay REDUCTION_SUM_REALPART = 10, 243857cbf51SRichard Tran Mills REDUCTION_MEAN_REALPART = 11, 244857cbf51SRichard Tran Mills REDUCTION_SUM_IMAGINARYPART = 12, 245857cbf51SRichard Tran Mills REDUCTION_MEAN_IMAGINARYPART = 13 246a873a8cdSSam Reynolds } ReductionType; 247a873a8cdSSam Reynolds 248a873a8cdSSam Reynolds /*MC 249857cbf51SRichard Tran Mills REDUCTION_SUM_REALPART - sum of real part of matrix column 250a873a8cdSSam Reynolds 251a873a8cdSSam Reynolds Level: beginner 252a873a8cdSSam Reynolds 253db781477SPatrick Sanan .seealso: `ReductionType`, `MatGetColumnReductions()`, `REDUCTION_SUM_IMAGINARYPART`, `REDUCTION_MEAN_REALPART`, `REDUCTION_NORM_1`, 254db781477SPatrick Sanan `REDUCTION_NORM_2`, `REDUCTION_NORM_FROBENIUS`, `REDUCTION_NORM_INFINITY` 255a873a8cdSSam Reynolds 256a873a8cdSSam Reynolds M*/ 257a873a8cdSSam Reynolds 258a873a8cdSSam Reynolds /*MC 259857cbf51SRichard Tran Mills REDUCTION_SUM_IMAGINARYPART - sum of imaginary part of matrix column 260a873a8cdSSam Reynolds 261a873a8cdSSam Reynolds Level: beginner 262a873a8cdSSam Reynolds 263db781477SPatrick Sanan .seealso: `ReductionType`, `MatGetColumnReductions()`, `REDUCTION_SUM_REALPART`, `REDUCTION_MEAN_IMAGINARYPART`, `REDUCTION_NORM_1`, 264db781477SPatrick Sanan `REDUCTION_NORM_2`, `REDUCTION_NORM_FROBENIUS`, `REDUCTION_NORM_INFINITY` 265857cbf51SRichard Tran Mills 266857cbf51SRichard Tran Mills M*/ 267857cbf51SRichard Tran Mills 268857cbf51SRichard Tran Mills /*MC 269857cbf51SRichard Tran Mills REDUCTION_MEAN_REALPART - arithmetic mean of real part of matrix column 270857cbf51SRichard Tran Mills 271857cbf51SRichard Tran Mills Level: beginner 272857cbf51SRichard Tran Mills 273db781477SPatrick Sanan .seealso: `ReductionType`, `MatGetColumnReductions()`, `REDUCTION_MEAN_IMAGINARYPART`, `REDUCTION_SUM_REALPART`, `REDUCTION_NORM_1`, 274db781477SPatrick Sanan `REDUCTION_NORM_2`, `REDUCTION_NORM_FROBENIUS`, `REDUCTION_NORM_INFINITY` 275857cbf51SRichard Tran Mills 276857cbf51SRichard Tran Mills M*/ 277857cbf51SRichard Tran Mills 278857cbf51SRichard Tran Mills /*MC 279857cbf51SRichard Tran Mills REDUCTION_MEAN_IMAGINARYPART - arithmetic mean of imaginary part of matrix column 280857cbf51SRichard Tran Mills 281857cbf51SRichard Tran Mills Level: beginner 282857cbf51SRichard Tran Mills 283db781477SPatrick Sanan .seealso: `ReductionType`, `MatGetColumnReductions()`, `REDUCTION_MEAN_REALPART`, `REDUCTION_SUM_IMAGINARYPART`, `REDUCTION_NORM_1`, 284db781477SPatrick Sanan `REDUCTION_NORM_2`, `REDUCTION_NORM_FROBENIUS`, `REDUCTION_NORM_INFINITY` 285a873a8cdSSam Reynolds 286a873a8cdSSam Reynolds M*/ 287a873a8cdSSam Reynolds 288014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecNorm(Vec, NormType, PetscReal *); 289014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecNormAvailable(Vec, NormType, PetscBool *, PetscReal *); 290014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecNormalize(Vec, PetscReal *); 291014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecSum(Vec, PetscScalar *); 292f7c17b9fSRichard Tran Mills PETSC_EXTERN PetscErrorCode VecMean(Vec, PetscScalar *); 293014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecMax(Vec, PetscInt *, PetscReal *); 294014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecMin(Vec, PetscInt *, PetscReal *); 295014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecScale(Vec, PetscScalar); 296014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecCopy(Vec, Vec); 297014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecSetRandom(Vec, PetscRandom); 298014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecSet(Vec, PetscScalar); 299422a814eSBarry Smith PETSC_EXTERN PetscErrorCode VecSetInf(Vec); 300014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecSwap(Vec, Vec); 301014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecAXPY(Vec, PetscScalar, Vec); 302014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecAXPBY(Vec, PetscScalar, PetscScalar, Vec); 303014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecMAXPY(Vec, PetscInt, const PetscScalar[], Vec[]); 304014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecAYPX(Vec, PetscScalar, Vec); 305014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecWAXPY(Vec, PetscScalar, Vec, Vec); 306014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecAXPBYPCZ(Vec, PetscScalar, PetscScalar, PetscScalar, Vec, Vec); 307014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecPointwiseMax(Vec, Vec, Vec); 308014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecPointwiseMaxAbs(Vec, Vec, Vec); 309014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecPointwiseMin(Vec, Vec, Vec); 310014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecPointwiseMult(Vec, Vec, Vec); 311014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecPointwiseDivide(Vec, Vec, Vec); 312014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecMaxPointwiseDivide(Vec, Vec, PetscReal *); 313014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecShift(Vec, PetscScalar); 314014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecReciprocal(Vec); 315014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecPermute(Vec, IS, PetscBool); 316014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecSqrtAbs(Vec); 317014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecLog(Vec); 318014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecExp(Vec); 319014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecAbs(Vec); 320014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecDuplicate(Vec, Vec *); 321014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecDuplicateVecs(Vec, PetscInt, Vec *[]); 322014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecDestroyVecs(PetscInt, Vec *[]); 323014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecStrideNormAll(Vec, NormType, PetscReal[]); 324014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecStrideMaxAll(Vec, PetscInt[], PetscReal[]); 325014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecStrideMinAll(Vec, PetscInt[], PetscReal[]); 326014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecStrideScaleAll(Vec, const PetscScalar[]); 327408c233dSJeremy L Thompson PETSC_EXTERN PetscErrorCode VecStrideSumAll(Vec, PetscScalar *); 328849b11cfSMatthew G. Knepley PETSC_EXTERN PetscErrorCode VecUniqueEntries(Vec, PetscInt *, PetscScalar **); 3294a560884SBarry Smith 330014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecStrideNorm(Vec, PetscInt, NormType, PetscReal *); 331014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecStrideMax(Vec, PetscInt, PetscInt *, PetscReal *); 332014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecStrideMin(Vec, PetscInt, PetscInt *, PetscReal *); 333014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecStrideScale(Vec, PetscInt, PetscScalar); 334408c233dSJeremy L Thompson PETSC_EXTERN PetscErrorCode VecStrideSum(Vec, PetscInt, PetscScalar *); 335014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecStrideSet(Vec, PetscInt, PetscScalar); 336954b3ec6SBarry Smith 337014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecStrideGather(Vec, PetscInt, Vec, InsertMode); 338014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecStrideScatter(Vec, PetscInt, Vec, InsertMode); 339014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecStrideGatherAll(Vec, Vec[], InsertMode); 340014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecStrideScatterAll(Vec[], Vec, InsertMode); 341d2655a18SBarry Smith 342bdeb6c88SBarry Smith PETSC_EXTERN PetscErrorCode VecStrideSubSetScatter(Vec, PetscInt, const PetscInt[], const PetscInt[], Vec, InsertMode); 343bdeb6c88SBarry Smith PETSC_EXTERN PetscErrorCode VecStrideSubSetGather(Vec, PetscInt, const PetscInt[], const PetscInt[], Vec, InsertMode); 344bdeb6c88SBarry Smith 345014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecSetValues(Vec, PetscInt, const PetscInt[], const PetscScalar[], InsertMode); 346014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecGetValues(Vec, PetscInt, const PetscInt[], PetscScalar[]); 347014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecAssemblyBegin(Vec); 348014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecAssemblyEnd(Vec); 349014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecStashSetInitialSize(Vec, PetscInt, PetscInt); 350014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecStashView(Vec, PetscViewer); 351685405a1SBarry Smith PETSC_EXTERN PetscErrorCode VecStashViewFromOptions(Vec, PetscObject, const char[]); 352014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecStashGetInfo(Vec, PetscInt *, PetscInt *, PetscInt *, PetscInt *); 35362dc5420SSatish Balay 354158e8e18SJunchao Zhang PETSC_EXTERN PetscErrorCode VecSetPreallocationCOO(Vec, PetscCount, const PetscInt[]); 355158e8e18SJunchao Zhang PETSC_EXTERN PetscErrorCode VecSetPreallocationCOOLocal(Vec, PetscCount, PetscInt[]); 356158e8e18SJunchao Zhang PETSC_EXTERN PetscErrorCode VecSetValuesCOO(Vec, const PetscScalar[], InsertMode); 357158e8e18SJunchao Zhang 35830de9b25SBarry Smith /*MC 35930de9b25SBarry Smith VecSetValue - Set a single entry into a vector. 36030de9b25SBarry Smith 36130de9b25SBarry Smith Synopsis: 362aaa7dc30SBarry Smith #include <petscvec.h> 3638122439eSJed Brown PetscErrorCode VecSetValue(Vec v,PetscInt row,PetscScalar value, InsertMode mode); 36430de9b25SBarry Smith 36530de9b25SBarry Smith Not Collective 36630de9b25SBarry Smith 36730de9b25SBarry Smith Input Parameters: 36830de9b25SBarry Smith + v - the vector 36930de9b25SBarry Smith . row - the row location of the entry 37030de9b25SBarry Smith . value - the value to insert 37187497f52SBarry Smith - mode - either `INSERT_VALUES` or `ADD_VALUES` 37230de9b25SBarry Smith 37330de9b25SBarry Smith Notes: 37487497f52SBarry Smith For efficiency one should use `VecSetValues()` and set several or 37530de9b25SBarry Smith many values simultaneously if possible. 37630de9b25SBarry Smith 37787497f52SBarry Smith These values may be cached, so `VecAssemblyBegin()` and `VecAssemblyEnd()` 37887497f52SBarry Smith MUST be called after all calls to `VecSetValue()` have been completed. 3791d73ed98SBarry Smith 38087497f52SBarry Smith `VecSetValue()` uses 0-based indices in Fortran as well as in C. 3811d73ed98SBarry Smith 3821d73ed98SBarry Smith Level: beginner 3831d73ed98SBarry Smith 384db781477SPatrick Sanan .seealso: `VecSetValues()`, `VecAssemblyBegin()`, `VecAssemblyEnd()`, `VecSetValuesBlockedLocal()`, `VecSetValueLocal()` 3851d73ed98SBarry Smith M*/ 386d71ae5a4SJacob Faibussowitsch static inline PetscErrorCode VecSetValue(Vec v, PetscInt i, PetscScalar va, InsertMode mode) 387d71ae5a4SJacob Faibussowitsch { 3889371c9d4SSatish Balay return VecSetValues(v, 1, &i, &va, mode); 3899371c9d4SSatish Balay } 3901d73ed98SBarry Smith 391014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecSetBlockSize(Vec, PetscInt); 392014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecGetBlockSize(Vec, PetscInt *); 393014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecSetValuesBlocked(Vec, PetscInt, const PetscInt[], const PetscScalar[], InsertMode); 3948ed539a5SBarry Smith 395fd487807SMatthew Knepley /* Dynamic creation and loading functions */ 396140e18c1SBarry Smith PETSC_EXTERN PetscFunctionList VecList; 39719fd82e9SBarry Smith PETSC_EXTERN PetscErrorCode VecSetType(Vec, VecType); 39819fd82e9SBarry Smith PETSC_EXTERN PetscErrorCode VecGetType(Vec, VecType *); 399bdf89e91SBarry Smith PETSC_EXTERN PetscErrorCode VecRegister(const char[], PetscErrorCode (*)(Vec)); 40030de9b25SBarry Smith 401014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecScatterBegin(VecScatter, Vec, Vec, InsertMode, ScatterMode); 402014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecScatterEnd(VecScatter, Vec, Vec, InsertMode, ScatterMode); 403014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecScatterDestroy(VecScatter *); 404246626dcSBarry Smith PETSC_EXTERN PetscErrorCode VecScatterSetUp(VecScatter); 405014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecScatterCopy(VecScatter, VecScatter *); 406014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecScatterView(VecScatter, PetscViewer); 407fe2efc57SMark PETSC_EXTERN PetscErrorCode VecScatterViewFromOptions(VecScatter, PetscObject, const char[]); 408d27e6124SSatish Balay PETSC_EXTERN PetscErrorCode VecScatterRemap(VecScatter, PetscInt[], PetscInt[]); 409014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecScatterGetMerged(VecScatter, PetscBool *); 4102195c698SBarry Smith 411014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecGetArray4d(Vec, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, PetscScalar ****[]); 412014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecRestoreArray4d(Vec, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, PetscScalar ****[]); 413014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecGetArray3d(Vec, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, PetscScalar ***[]); 414014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecRestoreArray3d(Vec, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, PetscScalar ***[]); 415014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecGetArray2d(Vec, PetscInt, PetscInt, PetscInt, PetscInt, PetscScalar **[]); 416014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecRestoreArray2d(Vec, PetscInt, PetscInt, PetscInt, PetscInt, PetscScalar **[]); 417014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecGetArray1d(Vec, PetscInt, PetscInt, PetscScalar *[]); 418014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecRestoreArray1d(Vec, PetscInt, PetscInt, PetscScalar *[]); 419ab360428SBarry Smith 420fdc842d1SBarry Smith PETSC_EXTERN PetscErrorCode VecGetArray4dWrite(Vec, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, PetscScalar ****[]); 421fdc842d1SBarry Smith PETSC_EXTERN PetscErrorCode VecGetArray4dWrite(Vec, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, PetscScalar ****[]); 422fdc842d1SBarry Smith PETSC_EXTERN PetscErrorCode VecRestoreArray4dWrite(Vec, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, PetscScalar ****[]); 423fdc842d1SBarry Smith PETSC_EXTERN PetscErrorCode VecGetArray3dWrite(Vec, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, PetscScalar ***[]); 424fdc842d1SBarry Smith PETSC_EXTERN PetscErrorCode VecRestoreArray3dWrite(Vec, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, PetscScalar ***[]); 425fdc842d1SBarry Smith PETSC_EXTERN PetscErrorCode VecGetArray2dWrite(Vec, PetscInt, PetscInt, PetscInt, PetscInt, PetscScalar **[]); 426fdc842d1SBarry Smith PETSC_EXTERN PetscErrorCode VecRestoreArray2dWrite(Vec, PetscInt, PetscInt, PetscInt, PetscInt, PetscScalar **[]); 427fdc842d1SBarry Smith PETSC_EXTERN PetscErrorCode VecGetArray1dWrite(Vec, PetscInt, PetscInt, PetscScalar *[]); 428fdc842d1SBarry Smith PETSC_EXTERN PetscErrorCode VecRestoreArray1dWrite(Vec, PetscInt, PetscInt, PetscScalar *[]); 429fdc842d1SBarry Smith 4305edff71fSBarry Smith PETSC_EXTERN PetscErrorCode VecGetArray4dRead(Vec, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, PetscScalar ****[]); 4315edff71fSBarry Smith PETSC_EXTERN PetscErrorCode VecRestoreArray4dRead(Vec, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, PetscScalar ****[]); 4325edff71fSBarry Smith PETSC_EXTERN PetscErrorCode VecGetArray3dRead(Vec, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, PetscScalar ***[]); 4335edff71fSBarry Smith PETSC_EXTERN PetscErrorCode VecRestoreArray3dRead(Vec, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, PetscScalar ***[]); 4345edff71fSBarry Smith PETSC_EXTERN PetscErrorCode VecGetArray2dRead(Vec, PetscInt, PetscInt, PetscInt, PetscInt, PetscScalar **[]); 4355edff71fSBarry Smith PETSC_EXTERN PetscErrorCode VecRestoreArray2dRead(Vec, PetscInt, PetscInt, PetscInt, PetscInt, PetscScalar **[]); 4365edff71fSBarry Smith PETSC_EXTERN PetscErrorCode VecGetArray1dRead(Vec, PetscInt, PetscInt, PetscScalar *[]); 4375edff71fSBarry Smith PETSC_EXTERN PetscErrorCode VecRestoreArray1dRead(Vec, PetscInt, PetscInt, PetscScalar *[]); 4385edff71fSBarry Smith 439014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecPlaceArray(Vec, const PetscScalar[]); 440014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecResetArray(Vec); 441014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecReplaceArray(Vec, const PetscScalar[]); 442de0d48c1SKarl Rupp 443014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecGetArrays(const Vec[], PetscInt, PetscScalar **[]); 444014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecRestoreArrays(const Vec[], PetscInt, PetscScalar **[]); 44584cb2905SBarry Smith 446014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecView(Vec, PetscViewer); 447f9558f5cSBarry Smith PETSC_EXTERN PetscErrorCode VecViewNative(Vec, PetscViewer); 448014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecEqual(Vec, Vec, PetscBool *); 449014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecLoad(Vec, PetscViewer); 4508ed539a5SBarry Smith 451014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecGetSize(Vec, PetscInt *); 452014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecGetLocalSize(Vec, PetscInt *); 453014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecGetOwnershipRange(Vec, PetscInt *, PetscInt *); 454014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecGetOwnershipRanges(Vec, const PetscInt *[]); 4558ed539a5SBarry Smith 456014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecSetLocalToGlobalMapping(Vec, ISLocalToGlobalMapping); 457014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecSetValuesLocal(Vec, PetscInt, const PetscInt[], const PetscScalar[], InsertMode); 45888b03592SBarry Smith 45976ec7f3eSKaushik Kulkarni PETSC_EXTERN PetscErrorCode VecViennaCLGetCLContext(Vec, PETSC_UINTPTR_T *); 46076ec7f3eSKaushik Kulkarni PETSC_EXTERN PetscErrorCode VecViennaCLGetCLQueue(Vec, PETSC_UINTPTR_T *); 46176ec7f3eSKaushik Kulkarni PETSC_EXTERN PetscErrorCode VecViennaCLGetCLMemRead(Vec, PETSC_UINTPTR_T *); 46276ec7f3eSKaushik Kulkarni PETSC_EXTERN PetscErrorCode VecViennaCLGetCLMemWrite(Vec, PETSC_UINTPTR_T *); 46376ec7f3eSKaushik Kulkarni PETSC_EXTERN PetscErrorCode VecViennaCLRestoreCLMemWrite(Vec); 46476ec7f3eSKaushik Kulkarni PETSC_EXTERN PetscErrorCode VecViennaCLGetCLMem(Vec, PETSC_UINTPTR_T *); 46576ec7f3eSKaushik Kulkarni PETSC_EXTERN PetscErrorCode VecViennaCLRestoreCLMem(Vec); 46676ec7f3eSKaushik Kulkarni 46788b03592SBarry Smith /*MC 46888b03592SBarry Smith VecSetValueLocal - Set a single entry into a vector using the local numbering 46988b03592SBarry Smith 47088b03592SBarry Smith Synopsis: 471aaa7dc30SBarry Smith #include <petscvec.h> 4728122439eSJed Brown PetscErrorCode VecSetValueLocal(Vec v,PetscInt row,PetscScalar value, InsertMode mode); 47388b03592SBarry Smith 47488b03592SBarry Smith Not Collective 47588b03592SBarry Smith 47688b03592SBarry Smith Input Parameters: 47788b03592SBarry Smith + v - the vector 47888b03592SBarry Smith . row - the row location of the entry 47988b03592SBarry Smith . value - the value to insert 48087497f52SBarry Smith - mode - either `INSERT_VALUES` or `ADD_VALUES` 48188b03592SBarry Smith 48288b03592SBarry Smith Notes: 48387497f52SBarry Smith For efficiency one should use `VecSetValues()` and set several or 48488b03592SBarry Smith many values simultaneously if possible. 48588b03592SBarry Smith 48687497f52SBarry Smith These values may be cached, so `VecAssemblyBegin()` and `VecAssemblyEnd()` 48787497f52SBarry Smith MUST be called after all calls to `VecSetValues()` have been completed. 48888b03592SBarry Smith 48987497f52SBarry Smith `VecSetValues()` uses 0-based indices in Fortran as well as in C. 49088b03592SBarry Smith 49188b03592SBarry Smith Level: beginner 49288b03592SBarry Smith 493db781477SPatrick Sanan .seealso: `VecSetValues()`, `VecAssemblyBegin()`, `VecAssemblyEnd()`, `VecSetValuesBlockedLocal()`, `VecSetValue()` 49488b03592SBarry Smith M*/ 495d71ae5a4SJacob Faibussowitsch static inline PetscErrorCode VecSetValueLocal(Vec v, PetscInt i, PetscScalar va, InsertMode mode) 496d71ae5a4SJacob Faibussowitsch { 4979371c9d4SSatish Balay return VecSetValuesLocal(v, 1, &i, &va, mode); 4989371c9d4SSatish Balay } 49988b03592SBarry Smith 500014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecSetValuesBlockedLocal(Vec, PetscInt, const PetscInt[], const PetscScalar[], InsertMode); 501014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecGetLocalToGlobalMapping(Vec, ISLocalToGlobalMapping *); 50290f02eecSBarry Smith 503014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecDotBegin(Vec, Vec, PetscScalar *); 504014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecDotEnd(Vec, Vec, PetscScalar *); 505014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecTDotBegin(Vec, Vec, PetscScalar *); 506014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecTDotEnd(Vec, Vec, PetscScalar *); 507014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecNormBegin(Vec, NormType, PetscReal *); 508014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecNormEnd(Vec, NormType, PetscReal *); 509d3c178dbSBarry Smith 510014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecMDotBegin(Vec, PetscInt, const Vec[], PetscScalar[]); 511014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecMDotEnd(Vec, PetscInt, const Vec[], PetscScalar[]); 512014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecMTDotBegin(Vec, PetscInt, const Vec[], PetscScalar[]); 513014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecMTDotEnd(Vec, PetscInt, const Vec[], PetscScalar[]); 514014dd563SJed Brown PETSC_EXTERN PetscErrorCode PetscCommSplitReductionBegin(MPI_Comm); 515a751f32aSSatish Balay 516b470e4b4SRichard Tran Mills PETSC_EXTERN PetscErrorCode VecBindToCPU(Vec, PetscBool); 517d71ae5a4SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION("Use VecBindToCPU (since v3.13)") static inline PetscErrorCode VecPinToCPU(Vec v, PetscBool flg) 518d71ae5a4SJacob Faibussowitsch { 5199371c9d4SSatish Balay return VecBindToCPU(v, flg); 5209371c9d4SSatish Balay } 5212216c58aSStefano Zampini PETSC_EXTERN PetscErrorCode VecBoundToCPU(Vec, PetscBool *); 52265a9ecf2SRichard Tran Mills PETSC_EXTERN PetscErrorCode VecSetBindingPropagates(Vec, PetscBool); 523e9c74fd6SRichard Tran Mills PETSC_EXTERN PetscErrorCode VecGetBindingPropagates(Vec, PetscBool *); 524387df023SRichard Tran Mills PETSC_EXTERN PetscErrorCode VecSetPinnedMemoryMin(Vec, size_t); 525387df023SRichard Tran Mills PETSC_EXTERN PetscErrorCode VecGetPinnedMemoryMin(Vec, size_t *); 526a751f32aSSatish Balay 5276fe358cdSKaushik Kulkarni PETSC_EXTERN PetscErrorCode VecGetOffloadMask(Vec, PetscOffloadMask *); 52848d97fd2SKaushik Kulkarni 5299371c9d4SSatish Balay typedef enum { 5309371c9d4SSatish Balay VEC_IGNORE_OFF_PROC_ENTRIES, 5319371c9d4SSatish Balay VEC_IGNORE_NEGATIVE_INDICES, 5329371c9d4SSatish Balay VEC_SUBSET_OFF_PROC_ENTRIES 5339371c9d4SSatish Balay } VecOption; 534014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecSetOption(Vec, VecOption, PetscBool); 53590f02eecSBarry Smith 5365c0c2446SJed Brown PETSC_EXTERN PetscErrorCode VecGetArray(Vec, PetscScalar **); 537fdc842d1SBarry Smith PETSC_EXTERN PetscErrorCode VecGetArrayWrite(Vec, PetscScalar **); 5385c0c2446SJed Brown PETSC_EXTERN PetscErrorCode VecGetArrayRead(Vec, const PetscScalar **); 5395c0c2446SJed Brown PETSC_EXTERN PetscErrorCode VecRestoreArray(Vec, PetscScalar **); 540fdc842d1SBarry Smith PETSC_EXTERN PetscErrorCode VecRestoreArrayWrite(Vec, PetscScalar **); 5415c0c2446SJed Brown PETSC_EXTERN PetscErrorCode VecRestoreArrayRead(Vec, const PetscScalar **); 542df341386SStefano Zampini PETSC_EXTERN PetscErrorCode VecCreateLocalVector(Vec, Vec *); 543046dc149SDominic Meiser PETSC_EXTERN PetscErrorCode VecGetLocalVector(Vec, Vec); 544046dc149SDominic Meiser PETSC_EXTERN PetscErrorCode VecRestoreLocalVector(Vec, Vec); 545046dc149SDominic Meiser PETSC_EXTERN PetscErrorCode VecGetLocalVectorRead(Vec, Vec); 546046dc149SDominic Meiser PETSC_EXTERN PetscErrorCode VecRestoreLocalVectorRead(Vec, Vec); 547a256111fSJunchao Zhang PETSC_EXTERN PetscErrorCode VecGetArrayAndMemType(Vec, PetscScalar **, PetscMemType *); 548a256111fSJunchao Zhang PETSC_EXTERN PetscErrorCode VecRestoreArrayAndMemType(Vec, PetscScalar **); 549a256111fSJunchao Zhang PETSC_EXTERN PetscErrorCode VecGetArrayReadAndMemType(Vec, const PetscScalar **, PetscMemType *); 550a256111fSJunchao Zhang PETSC_EXTERN PetscErrorCode VecRestoreArrayReadAndMemType(Vec, const PetscScalar **); 551b5f78e91SJunchao Zhang PETSC_EXTERN PetscErrorCode VecGetArrayWriteAndMemType(Vec, PetscScalar **, PetscMemType *); 552b5f78e91SJunchao Zhang PETSC_EXTERN PetscErrorCode VecRestoreArrayWriteAndMemType(Vec, PetscScalar **); 55310171e34SJunchao Zhang 5549521ec69SBarry Smith /*@C 5559521ec69SBarry Smith VecGetArrayPair - Accesses a pair of pointers for two vectors that may be common. When not common the first is read only 5569521ec69SBarry Smith 557c3339decSBarry Smith Logically Collective 5589521ec69SBarry Smith 559f5f57ec0SBarry Smith Input Parameters: 5609521ec69SBarry Smith + x - the vector 5619521ec69SBarry Smith - y - the second vector 5629521ec69SBarry Smith 563f5f57ec0SBarry Smith Output Parameters: 5649521ec69SBarry Smith + xv - location to put pointer to the first array 5659521ec69SBarry Smith - yv - location to put pointer to the second array 5669521ec69SBarry Smith 5679521ec69SBarry Smith Level: developer 5689521ec69SBarry Smith 569f5f57ec0SBarry Smith Not available from Fortran 570f5f57ec0SBarry Smith 571db781477SPatrick Sanan .seealso: `VecGetArray()`, `VecGetArrayRead()`, `VecRestoreArrayPair()` 5729521ec69SBarry Smith 5739521ec69SBarry Smith @*/ 574d71ae5a4SJacob Faibussowitsch static inline PetscErrorCode VecGetArrayPair(Vec x, Vec y, PetscScalar **xv, PetscScalar **yv) 575d71ae5a4SJacob Faibussowitsch { 576d9ca1df4SBarry Smith PetscFunctionBegin; 5779566063dSJacob Faibussowitsch PetscCall(VecGetArray(y, yv)); 5785f80ce2aSJacob Faibussowitsch if (x == y) *xv = *yv; 5799566063dSJacob Faibussowitsch else PetscCall(VecGetArrayRead(x, (const PetscScalar **)xv)); 580d9ca1df4SBarry Smith PetscFunctionReturn(0); 581d9ca1df4SBarry Smith } 5829521ec69SBarry Smith 5839521ec69SBarry Smith /*@C 5849521ec69SBarry Smith VecRestoreArrayPair - Returns a pair of pointers for two vectors that may be common. When not common the first is read only 5859521ec69SBarry Smith 586c3339decSBarry Smith Logically Collective 5879521ec69SBarry Smith 588f5f57ec0SBarry Smith Input Parameters: 5899521ec69SBarry Smith + x - the vector 5909521ec69SBarry Smith - y - the second vector 5919521ec69SBarry Smith 592f5f57ec0SBarry Smith Output Parameters: 5939521ec69SBarry Smith + xv - location to put pointer to the first array 5949521ec69SBarry Smith - yv - location to put pointer to the second array 5959521ec69SBarry Smith 5969521ec69SBarry Smith Level: developer 5979521ec69SBarry Smith 598f5f57ec0SBarry Smith Not available from Fortran 599f5f57ec0SBarry Smith 600db781477SPatrick Sanan .seealso: `VecGetArray()`, `VecGetArrayRead()`, `VecGetArrayPair()` 6019521ec69SBarry Smith 6029521ec69SBarry Smith @*/ 603d71ae5a4SJacob Faibussowitsch static inline PetscErrorCode VecRestoreArrayPair(Vec x, Vec y, PetscScalar **xv, PetscScalar **yv) 604d71ae5a4SJacob Faibussowitsch { 605d9ca1df4SBarry Smith PetscFunctionBegin; 6069566063dSJacob Faibussowitsch PetscCall(VecRestoreArray(y, yv)); 6079566063dSJacob Faibussowitsch if (x != y) PetscCall(VecRestoreArrayRead(x, (const PetscScalar **)xv)); 608d9ca1df4SBarry Smith PetscFunctionReturn(0); 609d9ca1df4SBarry Smith } 610d9ca1df4SBarry Smith 611d9ca1df4SBarry Smith #if defined(PETSC_USE_DEBUG) 61238fecf7cSJunchao Zhang PETSC_EXTERN PetscErrorCode VecLockReadPush(Vec); 61338fecf7cSJunchao Zhang PETSC_EXTERN PetscErrorCode VecLockReadPop(Vec); 614805b4a0dSBarry Smith PETSC_EXTERN PetscErrorCode VecLockWriteSet(Vec, PetscBool); 615d9ca1df4SBarry Smith PETSC_EXTERN PetscErrorCode VecLockGet(Vec, PetscInt *); 6165a96b57dSJacob Faibussowitsch PETSC_EXTERN PetscErrorCode VecLockGetLocation(Vec, const char *[], const char *[], int *); 617d71ae5a4SJacob Faibussowitsch static inline PetscErrorCode VecSetErrorIfLocked(Vec x, PetscInt arg) 618d71ae5a4SJacob Faibussowitsch { 619da1c2f70SJunchao Zhang PetscInt state; 62038fecf7cSJunchao Zhang 621da1c2f70SJunchao Zhang PetscFunctionBegin; 6229566063dSJacob Faibussowitsch PetscCall(VecLockGet(x, &state)); 6235a96b57dSJacob Faibussowitsch if (PetscUnlikely(state != 0)) { 6245a96b57dSJacob Faibussowitsch const char *file, *func, *name; 6255a96b57dSJacob Faibussowitsch int line; 6265a96b57dSJacob Faibussowitsch 6275a96b57dSJacob Faibussowitsch PetscCall(VecLockGetLocation(x, &file, &func, &line)); 6285a96b57dSJacob Faibussowitsch PetscCall(PetscObjectGetName((PetscObject)x, &name)); 629*dfb7d7afSStefano Zampini SETERRQ(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONGSTATE, "Vector '%s' (argument #%" PetscInt_FMT ") was locked for %s access in %s() at %s:%d (line numbers only accurate to function begin)", name, arg, state > 0 ? "read-only" : "write-only", func ? func : "unknown_function", file ? file : "unknown file", line); 6305a96b57dSJacob Faibussowitsch } 631da1c2f70SJunchao Zhang PetscFunctionReturn(0); 632da1c2f70SJunchao Zhang } 63338fecf7cSJunchao Zhang /* The three are deprecated */ 6345f1efc1aSLisandro Dalcin PETSC_EXTERN PETSC_DEPRECATED_FUNCTION("Use VecLockReadPush() (since version 3.11)") PetscErrorCode VecLockPush(Vec); 6355f1efc1aSLisandro Dalcin PETSC_EXTERN PETSC_DEPRECATED_FUNCTION("Use VecLockReadPop() (since version 3.11)") PetscErrorCode VecLockPop(Vec); 636ed274036SLisandro Dalcin #define VecLocked(x, arg) VecSetErrorIfLocked(x, arg) PETSC_DEPRECATED_MACRO("GCC warning \"Use VecSetErrorIfLocked() (since version 3.11)\"") 637d9ca1df4SBarry Smith #else 63845fccdb2SJunchao Zhang #define VecLockReadPush(x) 0 63945fccdb2SJunchao Zhang #define VecLockReadPop(x) 0 64038fecf7cSJunchao Zhang #define VecLockGet(x, s) *(s) = 0 64145fccdb2SJunchao Zhang #define VecSetErrorIfLocked(x, arg) 0 642805b4a0dSBarry Smith #define VecLockWriteSet(x, flg) 0 64338fecf7cSJunchao Zhang /* The three are deprecated */ 64445fccdb2SJunchao Zhang #define VecLockPush(x) 0 64545fccdb2SJunchao Zhang #define VecLockPop(x) 0 64645fccdb2SJunchao Zhang #define VecLocked(x, arg) 0 647d9ca1df4SBarry Smith #endif 648e1fa1e0fSSatish Balay 64974852143SJacob Faibussowitsch /*E 65074852143SJacob Faibussowitsch VecOperation - Enumeration of overide-able methods in the `Vec` implementation function-table. 65174852143SJacob Faibussowitsch 65274852143SJacob Faibussowitsch + VECOP_DUPLICATE - `VecDuplicate()` 65374852143SJacob Faibussowitsch . VECOP_SET - `VecSet()` 65474852143SJacob Faibussowitsch . VECOP_VIEW - `VecView()` 65574852143SJacob Faibussowitsch . VECOP_LOAD - `VecLoad()` 65674852143SJacob Faibussowitsch . VECOP_VIEWNATIVE - `VecViewNative()` 65774852143SJacob Faibussowitsch - VECOP_LOADNATIVE - `VecLoadNative()` 65874852143SJacob Faibussowitsch 65974852143SJacob Faibussowitsch Notes: 66074852143SJacob Faibussowitsch Some operations may serve as the implementation for other routines not listed above. For 66174852143SJacob Faibussowitsch example `VECOP_SET` can be used to simultaneously overriding the implementation used in 66274852143SJacob Faibussowitsch `VecSet()`, `VecSetInf()`, and `VecZeroEntries()`. 66374852143SJacob Faibussowitsch 66474852143SJacob Faibussowitsch Entries to `VecOperation` are added as needed so if you do not see the operation listed which 66574852143SJacob Faibussowitsch you'd like to replace, please send mail to `petsc-maint@mcs.anl.gov`! 66674852143SJacob Faibussowitsch 66774852143SJacob Faibussowitsch Level: advanced 66874852143SJacob Faibussowitsch 66974852143SJacob Faibussowitsch .seealso: `Vec`, `VecSetOperation()` 67023084d82SJacob Faibussowitsch E*/ 6719371c9d4SSatish Balay typedef enum { 6729371c9d4SSatish Balay VECOP_DUPLICATE = 0, 67374852143SJacob Faibussowitsch VECOP_SET = 10, 6749371c9d4SSatish Balay VECOP_VIEW = 33, 6759371c9d4SSatish Balay VECOP_LOAD = 41, 6769371c9d4SSatish Balay VECOP_VIEWNATIVE = 68, 6779371c9d4SSatish Balay VECOP_LOADNATIVE = 69 6789371c9d4SSatish Balay } VecOperation; 679014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecSetOperation(Vec, VecOperation, void (*)(void)); 680b19c1e4cSBarry Smith 681e182c471SBarry Smith /* 682e182c471SBarry Smith Routines for dealing with ghosted vectors: 683e182c471SBarry Smith vectors with ghost elements at the end of the array. 684e182c471SBarry Smith */ 685014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecMPISetGhost(Vec, PetscInt, const PetscInt[]); 686014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecCreateGhost(MPI_Comm, PetscInt, PetscInt, PetscInt, const PetscInt[], Vec *); 687014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecCreateGhostWithArray(MPI_Comm, PetscInt, PetscInt, PetscInt, const PetscInt[], const PetscScalar[], Vec *); 688014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecCreateGhostBlock(MPI_Comm, PetscInt, PetscInt, PetscInt, PetscInt, const PetscInt[], Vec *); 689014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecCreateGhostBlockWithArray(MPI_Comm, PetscInt, PetscInt, PetscInt, PetscInt, const PetscInt[], const PetscScalar[], Vec *); 690014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecGhostGetLocalForm(Vec, Vec *); 691014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecGhostRestoreLocalForm(Vec, Vec *); 6923efe6655SBarry Smith PETSC_EXTERN PetscErrorCode VecGhostIsLocalForm(Vec, Vec, PetscBool *); 693014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecGhostUpdateBegin(Vec, InsertMode, ScatterMode); 694014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecGhostUpdateEnd(Vec, InsertMode, ScatterMode); 695e182c471SBarry Smith 696014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecConjugate(Vec); 697c92e3469SBarry Smith PETSC_EXTERN PetscErrorCode VecImaginaryPart(Vec); 698c92e3469SBarry Smith PETSC_EXTERN PetscErrorCode VecRealPart(Vec); 69934233285SBarry Smith 700014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecScatterCreateToAll(Vec, VecScatter *, Vec *); 701014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecScatterCreateToZero(Vec, VecScatter *, Vec *); 702bba1ac68SSatish Balay 7034473680cSBarry Smith PETSC_EXTERN PetscErrorCode ISComplementVec(IS, Vec, IS *); 7044473680cSBarry Smith PETSC_EXTERN PetscErrorCode VecPow(Vec, PetscScalar); 7054473680cSBarry Smith PETSC_EXTERN PetscErrorCode VecMedian(Vec, Vec, Vec, Vec); 706ce902467SBarry Smith PETSC_EXTERN PetscErrorCode VecWhichInactive(Vec, Vec, Vec, Vec, PetscBool, IS *); 7074473680cSBarry Smith PETSC_EXTERN PetscErrorCode VecWhichBetween(Vec, Vec, Vec, IS *); 7084473680cSBarry Smith PETSC_EXTERN PetscErrorCode VecWhichBetweenOrEqual(Vec, Vec, Vec, IS *); 7094473680cSBarry Smith PETSC_EXTERN PetscErrorCode VecWhichGreaterThan(Vec, Vec, IS *); 7104473680cSBarry Smith PETSC_EXTERN PetscErrorCode VecWhichLessThan(Vec, Vec, IS *); 7114473680cSBarry Smith PETSC_EXTERN PetscErrorCode VecWhichEqual(Vec, Vec, IS *); 7124473680cSBarry Smith PETSC_EXTERN PetscErrorCode VecISAXPY(Vec, IS, PetscScalar, Vec); 7138883cd90SMatthew G. Knepley PETSC_EXTERN PetscErrorCode VecISCopy(Vec, IS, ScatterMode, Vec); 7144473680cSBarry Smith PETSC_EXTERN PetscErrorCode VecISSet(Vec, IS, PetscScalar); 7154473680cSBarry Smith PETSC_EXTERN PetscErrorCode VecBoundGradientProjection(Vec, Vec, Vec, Vec, Vec); 7164473680cSBarry Smith PETSC_EXTERN PetscErrorCode VecStepBoundInfo(Vec, Vec, Vec, Vec, PetscReal *, PetscReal *, PetscReal *); 7174473680cSBarry Smith PETSC_EXTERN PetscErrorCode VecStepMax(Vec, Vec, PetscReal *); 7184473680cSBarry Smith PETSC_EXTERN PetscErrorCode VecStepMaxBounded(Vec, Vec, Vec, Vec, PetscReal *); 7194473680cSBarry Smith 720014dd563SJed Brown PETSC_EXTERN PetscErrorCode PetscViewerMathematicaGetVector(PetscViewer, Vec); 721014dd563SJed Brown PETSC_EXTERN PetscErrorCode PetscViewerMathematicaPutVector(PetscViewer, Vec); 7227dbadf16SMatthew Knepley 723d59c15a7SBarry Smith /*S 724d59c15a7SBarry Smith Vecs - Collection of vectors where the data for the vectors is stored in 725759e7b9cSHong Zhang one contiguous memory 726d59c15a7SBarry Smith 727d59c15a7SBarry Smith Level: advanced 728d59c15a7SBarry Smith 729d59c15a7SBarry Smith Notes: 730d59c15a7SBarry Smith Temporary construct for handling multiply right hand side solves 731d59c15a7SBarry Smith 732d59c15a7SBarry Smith This is faked by storing a single vector that has enough array space for 733d59c15a7SBarry Smith n vectors 734d59c15a7SBarry Smith 735d59c15a7SBarry Smith S*/ 7369371c9d4SSatish Balay struct _n_Vecs { 7379371c9d4SSatish Balay PetscInt n; 7389371c9d4SSatish Balay Vec v; 7399371c9d4SSatish Balay }; 74095fbd943SSatish Balay typedef struct _n_Vecs *Vecs; 741e1317eeeSBarry Smith PETSC_EXTERN PetscErrorCode VecsDestroy(Vecs); 742e1317eeeSBarry Smith PETSC_EXTERN PetscErrorCode VecsCreateSeq(MPI_Comm, PetscInt, PetscInt, Vecs *); 743e1317eeeSBarry Smith PETSC_EXTERN PetscErrorCode VecsCreateSeqWithArray(MPI_Comm, PetscInt, PetscInt, PetscScalar *, Vecs *); 744e1317eeeSBarry Smith PETSC_EXTERN PetscErrorCode VecsDuplicate(Vecs, Vecs *); 745e9fa29b7SSatish Balay 746e9e886b6SKarl Rupp #if defined(PETSC_HAVE_VIENNACL) 747b17c682bSKarl Rupp typedef struct _p_PetscViennaCLIndices *PetscViennaCLIndices; 748b17c682bSKarl Rupp PETSC_EXTERN PetscErrorCode PetscViennaCLIndicesCreate(PetscInt, PetscInt *, PetscInt, PetscInt *, PetscViennaCLIndices *); 749b17c682bSKarl Rupp PETSC_EXTERN PetscErrorCode PetscViennaCLIndicesDestroy(PetscViennaCLIndices *); 750b17c682bSKarl Rupp PETSC_EXTERN PetscErrorCode VecViennaCLCopyToGPUSome_Public(Vec, PetscViennaCLIndices); 751b17c682bSKarl Rupp PETSC_EXTERN PetscErrorCode VecViennaCLCopyFromGPUSome_Public(Vec, PetscViennaCLIndices); 752b17c682bSKarl Rupp PETSC_EXTERN PetscErrorCode VecCreateSeqViennaCL(MPI_Comm, PetscInt, Vec *); 753b17c682bSKarl Rupp PETSC_EXTERN PetscErrorCode VecCreateMPIViennaCL(MPI_Comm, PetscInt, PetscInt, Vec *); 754b8ced49eSKarl Rupp #endif 75559af0bd3SScott Kruger #if defined(PETSC_HAVE_CUDA) || defined(PETSC_HAVE_HIP) 75659af0bd3SScott Kruger PETSC_EXTERN PetscErrorCode VecScatterInitializeForGPU(VecScatter, Vec); 75759af0bd3SScott Kruger PETSC_EXTERN PetscErrorCode VecScatterFinalizeForGPU(VecScatter); 75859af0bd3SScott Kruger #endif 7591e8b6502SStefano Zampini #if defined(PETSC_HAVE_KOKKOS_KERNELS) 7601e8b6502SStefano Zampini PETSC_EXTERN PetscErrorCode VecCreateSeqKokkos(MPI_Comm, PetscInt, Vec *); 7611e8b6502SStefano Zampini PETSC_EXTERN PetscErrorCode VecCreateSeqKokkosWithArray(MPI_Comm, PetscInt, PetscInt, const PetscScalar *, Vec *); 7621e8b6502SStefano Zampini PETSC_EXTERN PetscErrorCode VecCreateMPIKokkos(MPI_Comm, PetscInt, PetscInt, Vec *); 7631e8b6502SStefano Zampini PETSC_EXTERN PetscErrorCode VecCreateMPIKokkosWithArray(MPI_Comm, PetscInt, PetscInt, PetscInt, const PetscScalar *, Vec *); 7641e8b6502SStefano Zampini #endif 765b17c682bSKarl Rupp 766014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecNestGetSubVecs(Vec, PetscInt *, Vec **); 767014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecNestGetSubVec(Vec, PetscInt, Vec *); 768014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecNestSetSubVecs(Vec, PetscInt, PetscInt *, Vec *); 769014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecNestSetSubVec(Vec, PetscInt, Vec); 770014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecCreateNest(MPI_Comm, PetscInt, IS *, Vec *, Vec *); 771014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecNestGetSize(Vec, PetscInt *); 77245b63f25SDmitry Karpeev 773c5929fdfSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsGetVec(PetscOptions, const char[], const char[], Vec, PetscBool *); 7744325cce7SMatthew G Knepley PETSC_EXTERN PetscErrorCode VecChop(Vec, PetscReal); 775ab352700SBarry Smith 776077aedafSJed Brown PETSC_EXTERN PetscErrorCode VecGetLayout(Vec, PetscLayout *); 777077aedafSJed Brown PETSC_EXTERN PetscErrorCode VecSetLayout(Vec, PetscLayout); 7789a6d0b0bSJed Brown 7799a6d0b0bSJed Brown PETSC_EXTERN PetscErrorCode PetscSectionVecView(PetscSection, Vec, PetscViewer); 7809a6d0b0bSJed Brown PETSC_EXTERN PetscErrorCode VecGetValuesSection(Vec, PetscSection, PetscInt, PetscScalar **); 7819a6d0b0bSJed Brown PETSC_EXTERN PetscErrorCode VecSetValuesSection(Vec, PetscSection, PetscInt, PetscScalar[], InsertMode); 78222d96a0cSMatthew G. Knepley PETSC_EXTERN PetscErrorCode PetscSectionVecNorm(PetscSection, PetscSection, Vec, NormType, PetscReal[]); 7839a6d0b0bSJed Brown 7845543aaa0SToby Isaac /*S 7855543aaa0SToby Isaac VecTagger - Object used to manage the tagging of a subset of indices based on the values of a vector. The 7865543aaa0SToby Isaac motivating application is the selection of cells for refinement or coarsening based on vector containing 7875543aaa0SToby Isaac the values in an error indicator metric. 7885543aaa0SToby Isaac 7895543aaa0SToby Isaac Level: advanced 79087497f52SBarry Smith 79187497f52SBarry Smith Developer Note: 79287497f52SBarry Smith Why not use a `DMLabel` or similar object 79387497f52SBarry Smith 7945543aaa0SToby Isaac S*/ 79561bbf837SToby Isaac typedef struct _p_VecTagger *VecTagger; 7965543aaa0SToby Isaac 7975543aaa0SToby Isaac /*J 79887497f52SBarry Smith VecTaggerType - String with the name of a `VecTagger` type 7995543aaa0SToby Isaac 8005543aaa0SToby Isaac Level: advanced 8015543aaa0SToby Isaac J*/ 8025543aaa0SToby Isaac typedef const char *VecTaggerType; 8034178c1b7SToby Isaac /* tag where the vector values are in a box of explicitly defined values */ 804cab77d58SToby Isaac #define VECTAGGERABSOLUTE "absolute" 8054178c1b7SToby Isaac /* tag where the vector values are in a box of values relative to the set of all values in the vector */ 8065543aaa0SToby Isaac #define VECTAGGERRELATIVE "relative" 8075543aaa0SToby Isaac /* tag where the vector values are in a relative range of the *cumulative distribution* of values in the vector */ 8081d1d0dd8SToby Isaac #define VECTAGGERCDF "cdf" 8095543aaa0SToby Isaac /* tag a vector as the union of other tags */ 8105543aaa0SToby Isaac #define VECTAGGEROR "or" 8115543aaa0SToby Isaac /* tag a vector as the intersection of other tags */ 8125543aaa0SToby Isaac #define VECTAGGERAND "and" 8135543aaa0SToby Isaac 8145543aaa0SToby Isaac PETSC_EXTERN PetscClassId VEC_TAGGER_CLASSID; 81561bbf837SToby Isaac PETSC_EXTERN PetscFunctionList VecTaggerList; 81661bbf837SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerRegister(const char[], PetscErrorCode (*)(VecTagger)); 8175543aaa0SToby Isaac 8185543aaa0SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerCreate(MPI_Comm, VecTagger *); 819cab77d58SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerSetBlockSize(VecTagger, PetscInt); 820cab77d58SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerGetBlockSize(VecTagger, PetscInt *); 8215543aaa0SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerSetType(VecTagger, VecTaggerType); 8225543aaa0SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerGetType(VecTagger, VecTaggerType *); 8235543aaa0SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerSetInvert(VecTagger, PetscBool); 8245543aaa0SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerGetInvert(VecTagger, PetscBool *); 8255543aaa0SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerSetFromOptions(VecTagger); 8265543aaa0SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerSetUp(VecTagger); 8275543aaa0SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerView(VecTagger, PetscViewer); 8281cee10b1SBarry Smith PETSC_EXTERN PetscErrorCode VecTaggerComputeIS(VecTagger, Vec, IS *, PetscBool *); 8295543aaa0SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerDestroy(VecTagger *); 8305543aaa0SToby Isaac 8314178c1b7SToby Isaac /*S 8324178c1b7SToby 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 8334178c1b7SToby Isaac such that real(min) <= real(z) <= real(max) and imag(min) <= imag(z) <= imag(max). INF is an acceptable endpoint. 83461bbf837SToby Isaac 8354178c1b7SToby Isaac Level: beginner 83661bbf837SToby Isaac 837db781477SPatrick Sanan .seealso: `VecTaggerComputeIntervals()` 8384178c1b7SToby Isaac S*/ 8394178c1b7SToby Isaac typedef struct { 8404178c1b7SToby Isaac PetscScalar min; 8414178c1b7SToby Isaac PetscScalar max; 8424178c1b7SToby Isaac } VecTaggerBox; 8431cee10b1SBarry Smith PETSC_EXTERN PetscErrorCode VecTaggerComputeBoxes(VecTagger, Vec, PetscInt *, VecTaggerBox **, PetscBool *); 8444178c1b7SToby Isaac 8454178c1b7SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerAbsoluteSetBox(VecTagger, VecTaggerBox *); 8464178c1b7SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerAbsoluteGetBox(VecTagger, const VecTaggerBox **); 8474178c1b7SToby Isaac 8484178c1b7SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerRelativeSetBox(VecTagger, VecTaggerBox *); 8494178c1b7SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerRelativeGetBox(VecTagger, const VecTaggerBox **); 8504178c1b7SToby Isaac 8514178c1b7SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerCDFSetBox(VecTagger, VecTaggerBox *); 8524178c1b7SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerCDFGetBox(VecTagger, const VecTaggerBox **); 8531d1d0dd8SToby Isaac 8541d1d0dd8SToby Isaac /*E 85587497f52SBarry Smith 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). 85687497f52SBarry Smith Relevant only in parallel: in serial it is directly computed. 8571d1d0dd8SToby Isaac 8581d1d0dd8SToby Isaac Level: advanced 85987497f52SBarry Smith 860db781477SPatrick Sanan .seealso: `VecTaggerCDFSetMethod()`, `VecTaggerCDFMethods` 8611d1d0dd8SToby Isaac E*/ 8629371c9d4SSatish Balay typedef enum { 8639371c9d4SSatish Balay VECTAGGER_CDF_GATHER, 8649371c9d4SSatish Balay VECTAGGER_CDF_ITERATIVE, 8659371c9d4SSatish Balay VECTAGGER_CDF_NUM_METHODS 8669371c9d4SSatish Balay } VecTaggerCDFMethod; 8671d1d0dd8SToby Isaac PETSC_EXTERN const char *const VecTaggerCDFMethods[]; 8681d1d0dd8SToby Isaac 8691d1d0dd8SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerCDFSetMethod(VecTagger, VecTaggerCDFMethod); 8701d1d0dd8SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerCDFGetMethod(VecTagger, VecTaggerCDFMethod *); 8711d1d0dd8SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerCDFIterativeSetTolerances(VecTagger, PetscInt, PetscReal, PetscReal); 8721d1d0dd8SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerCDFIterativeGetTolerances(VecTagger, PetscInt *, PetscReal *, PetscReal *); 87361bbf837SToby Isaac 874497ee004SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerOrSetSubs(VecTagger, PetscInt, VecTagger *, PetscCopyMode); 875497ee004SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerOrGetSubs(VecTagger, PetscInt *, VecTagger **); 87661bbf837SToby Isaac 877497ee004SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerAndSetSubs(VecTagger, PetscInt, VecTagger *, PetscCopyMode); 878497ee004SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerAndGetSubs(VecTagger, PetscInt *, VecTagger **); 87961bbf837SToby Isaac 88061bbf837SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerInitializePackage(void); 88161bbf837SToby Isaac PETSC_EXTERN PetscErrorCode VecTaggerFinalizePackage(void); 88261bbf837SToby Isaac 883e0f629ddSJacob Faibussowitsch #if PetscDefined(USE_DEBUG) 884e0f629ddSJacob Faibussowitsch /* This is an internal debug-only routine that should not be used by users */ 885e0f629ddSJacob Faibussowitsch PETSC_SINGLE_LIBRARY_INTERN PetscErrorCode VecValidValues_Internal(Vec, PetscInt, PetscBool); 886e0f629ddSJacob Faibussowitsch #else 887e0f629ddSJacob Faibussowitsch #define VecValidValues_Internal(...) 0 888e0f629ddSJacob Faibussowitsch #endif /* PETSC_USE_DEBUG */ 889e0f629ddSJacob Faibussowitsch 8906d54fb17SJacob Faibussowitsch #define VEC_CUPM_NOT_CONFIGURED(impl) SETERRQ(PETSC_COMM_SELF, PETSC_ERR_SUP_SYS, "Must configure PETSc with " PetscStringize(impl) " support to use %s", PETSC_FUNCTION_NAME) 891cdf07013SJacob Faibussowitsch 8926d54fb17SJacob Faibussowitsch #if PetscDefined(HAVE_CUDA) 893cdf07013SJacob Faibussowitsch #define VEC_CUDA_DECL_OR_STUB(__decl__, ...) PETSC_EXTERN __decl__; 8946d54fb17SJacob Faibussowitsch #else 895cdf07013SJacob Faibussowitsch #define VEC_CUDA_DECL_OR_STUB(__decl__, ...) \ 896cdf07013SJacob Faibussowitsch static inline __decl__ \ 8976d54fb17SJacob Faibussowitsch { \ 898cdf07013SJacob Faibussowitsch __VA_ARGS__; \ 8996d54fb17SJacob Faibussowitsch VEC_CUPM_NOT_CONFIGURED(cuda); \ 9006d54fb17SJacob Faibussowitsch } 9016d54fb17SJacob Faibussowitsch #endif /* PETSC_HAVE_CUDA */ 9026d54fb17SJacob Faibussowitsch 9036d54fb17SJacob Faibussowitsch /* extra underscore here to make it line up with the cuda versions */ 9046d54fb17SJacob Faibussowitsch #if PetscDefined(HAVE_HIP) 905cdf07013SJacob Faibussowitsch #define VEC_HIP__DECL_OR_STUB(__decl__, ...) PETSC_EXTERN __decl__; 9066d54fb17SJacob Faibussowitsch #else 907cdf07013SJacob Faibussowitsch #define VEC_HIP__DECL_OR_STUB(__decl__, ...) \ 908cdf07013SJacob Faibussowitsch static inline __decl__ \ 9096d54fb17SJacob Faibussowitsch { \ 910cdf07013SJacob Faibussowitsch __VA_ARGS__; \ 9116d54fb17SJacob Faibussowitsch VEC_CUPM_NOT_CONFIGURED(hip); \ 9126d54fb17SJacob Faibussowitsch } 9136d54fb17SJacob Faibussowitsch #endif /* PETSC_HAVE_HIP */ 9146d54fb17SJacob Faibussowitsch 915cdf07013SJacob Faibussowitsch VEC_CUDA_DECL_OR_STUB(PetscErrorCode VecCreateSeqCUDA(MPI_Comm a, PetscInt b, Vec *c), (void)a, (void)b, (void)c) 916cdf07013SJacob Faibussowitsch VEC_HIP__DECL_OR_STUB(PetscErrorCode VecCreateSeqHIP(MPI_Comm a, PetscInt b, Vec *c), (void)a, (void)b, (void)c) 9176d54fb17SJacob Faibussowitsch 918cdf07013SJacob Faibussowitsch VEC_CUDA_DECL_OR_STUB(PetscErrorCode VecCreateSeqCUDAWithArray(MPI_Comm a, PetscInt b, PetscInt c, const PetscScalar *d, Vec *e), (void)a, (void)b, (void)c, (void)d, (void)e) 919cdf07013SJacob Faibussowitsch VEC_HIP__DECL_OR_STUB(PetscErrorCode VecCreateSeqHIPWithArray(MPI_Comm a, PetscInt b, PetscInt c, const PetscScalar *d, Vec *e), (void)a, (void)b, (void)c, (void)d, (void)e) 9206d54fb17SJacob Faibussowitsch 921cdf07013SJacob Faibussowitsch VEC_CUDA_DECL_OR_STUB(PetscErrorCode VecCreateSeqCUDAWithArrays(MPI_Comm a, PetscInt b, PetscInt c, const PetscScalar *d, const PetscScalar *e, Vec *f), (void)a, (void)b, (void)c, (void)d, (void)e, (void)f) 922cdf07013SJacob Faibussowitsch VEC_HIP__DECL_OR_STUB(PetscErrorCode VecCreateSeqHIPWithArrays(MPI_Comm a, PetscInt b, PetscInt c, const PetscScalar *d, const PetscScalar *e, Vec *f), (void)a, (void)b, (void)c, (void)d, (void)e, (void)f) 9236d54fb17SJacob Faibussowitsch 924cdf07013SJacob Faibussowitsch VEC_CUDA_DECL_OR_STUB(PetscErrorCode VecCreateMPICUDA(MPI_Comm a, PetscInt b, PetscInt c, Vec *d), (void)a, (void)b, (void)c, (void)d) 925cdf07013SJacob Faibussowitsch VEC_HIP__DECL_OR_STUB(PetscErrorCode VecCreateMPIHIP(MPI_Comm a, PetscInt b, PetscInt c, Vec *d), (void)a, (void)b, (void)c, (void)d) 9266d54fb17SJacob Faibussowitsch 927cdf07013SJacob Faibussowitsch VEC_CUDA_DECL_OR_STUB(PetscErrorCode VecCreateMPICUDAWithArray(MPI_Comm a, PetscInt b, PetscInt c, PetscInt d, const PetscScalar *e, Vec *f), (void)a, (void)b, (void)c, (void)d, (void)e, (void)f) 928cdf07013SJacob Faibussowitsch VEC_HIP__DECL_OR_STUB(PetscErrorCode VecCreateMPIHIPWithArray(MPI_Comm a, PetscInt b, PetscInt c, PetscInt d, const PetscScalar *e, Vec *f), (void)a, (void)b, (void)c, (void)d, (void)e, (void)f) 9296d54fb17SJacob Faibussowitsch 930cdf07013SJacob Faibussowitsch VEC_CUDA_DECL_OR_STUB(PetscErrorCode VecCreateMPICUDAWithArrays(MPI_Comm a, PetscInt b, PetscInt c, PetscInt d, const PetscScalar *e, const PetscScalar *f, Vec *g), (void)a, (void)b, (void)c, (void)d, (void)e, (void)f, (void)g) 931cdf07013SJacob Faibussowitsch VEC_HIP__DECL_OR_STUB(PetscErrorCode VecCreateMPIHIPWithArrays(MPI_Comm a, PetscInt b, PetscInt c, PetscInt d, const PetscScalar *e, const PetscScalar *f, Vec *g), (void)a, (void)b, (void)c, (void)d, (void)e, (void)f, (void)g) 9326d54fb17SJacob Faibussowitsch 933cdf07013SJacob Faibussowitsch VEC_CUDA_DECL_OR_STUB(PetscErrorCode VecCUDAGetArray(Vec a, PetscScalar **b), (void)a, (void)b) 934cdf07013SJacob Faibussowitsch VEC_HIP__DECL_OR_STUB(PetscErrorCode VecHIPGetArray(Vec a, PetscScalar **b), (void)a, (void)b) 9356d54fb17SJacob Faibussowitsch 936cdf07013SJacob Faibussowitsch VEC_CUDA_DECL_OR_STUB(PetscErrorCode VecCUDARestoreArray(Vec a, PetscScalar **b), (void)a, (void)b) 937cdf07013SJacob Faibussowitsch VEC_HIP__DECL_OR_STUB(PetscErrorCode VecHIPRestoreArray(Vec a, PetscScalar **b), (void)a, (void)b) 9386d54fb17SJacob Faibussowitsch 939cdf07013SJacob Faibussowitsch VEC_CUDA_DECL_OR_STUB(PetscErrorCode VecCUDAGetArrayRead(Vec a, const PetscScalar **b), (void)a, (void)b) 940cdf07013SJacob Faibussowitsch VEC_HIP__DECL_OR_STUB(PetscErrorCode VecHIPGetArrayRead(Vec a, const PetscScalar **b), (void)a, (void)b) 9416d54fb17SJacob Faibussowitsch 942cdf07013SJacob Faibussowitsch VEC_CUDA_DECL_OR_STUB(PetscErrorCode VecCUDARestoreArrayRead(Vec a, const PetscScalar **b), (void)a, (void)b) 943cdf07013SJacob Faibussowitsch VEC_HIP__DECL_OR_STUB(PetscErrorCode VecHIPRestoreArrayRead(Vec a, const PetscScalar **b), (void)a, (void)b) 9446d54fb17SJacob Faibussowitsch 945cdf07013SJacob Faibussowitsch VEC_CUDA_DECL_OR_STUB(PetscErrorCode VecCUDAGetArrayWrite(Vec a, PetscScalar **b), (void)a, (void)b) 946cdf07013SJacob Faibussowitsch VEC_HIP__DECL_OR_STUB(PetscErrorCode VecHIPGetArrayWrite(Vec a, PetscScalar **b), (void)a, (void)b) 9476d54fb17SJacob Faibussowitsch 948cdf07013SJacob Faibussowitsch VEC_CUDA_DECL_OR_STUB(PetscErrorCode VecCUDARestoreArrayWrite(Vec a, PetscScalar **b), (void)a, (void)b) 949cdf07013SJacob Faibussowitsch VEC_HIP__DECL_OR_STUB(PetscErrorCode VecHIPRestoreArrayWrite(Vec a, PetscScalar **b), (void)a, (void)b) 9506d54fb17SJacob Faibussowitsch 951cdf07013SJacob Faibussowitsch VEC_CUDA_DECL_OR_STUB(PetscErrorCode VecCUDAPlaceArray(Vec a, const PetscScalar b[]), (void)a, (void)b) 952cdf07013SJacob Faibussowitsch VEC_HIP__DECL_OR_STUB(PetscErrorCode VecHIPPlaceArray(Vec a, const PetscScalar b[]), (void)a, (void)b) 9536d54fb17SJacob Faibussowitsch 954cdf07013SJacob Faibussowitsch VEC_CUDA_DECL_OR_STUB(PetscErrorCode VecCUDAReplaceArray(Vec a, const PetscScalar b[]), (void)a, (void)b) 955cdf07013SJacob Faibussowitsch VEC_HIP__DECL_OR_STUB(PetscErrorCode VecHIPReplaceArray(Vec a, const PetscScalar b[]), (void)a, (void)b) 9566d54fb17SJacob Faibussowitsch 957cdf07013SJacob Faibussowitsch VEC_CUDA_DECL_OR_STUB(PetscErrorCode VecCUDAResetArray(Vec a), (void)a) 958cdf07013SJacob Faibussowitsch VEC_HIP__DECL_OR_STUB(PetscErrorCode VecHIPResetArray(Vec a), (void)a) 9596d54fb17SJacob Faibussowitsch 9606d54fb17SJacob Faibussowitsch #undef VEC_CUPM_NOT_CONFIGURED 9616d54fb17SJacob Faibussowitsch #undef VEC_CUDA_DECL_OR_STUB 9626d54fb17SJacob Faibussowitsch #undef VEC_HIP__DECL_OR_STUB 9636d54fb17SJacob Faibussowitsch 9642eac72dbSBarry Smith #endif 965