Actual source code: vecimplslepc.h
1: /*
2: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
3: SLEPc - Scalable Library for Eigenvalue Problem Computations
4: Copyright (c) 2002-, Universitat Politecnica de Valencia, Spain
6: This file is part of SLEPc.
7: SLEPc is distributed under a 2-clause BSD license (see LICENSE).
8: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
9: */
11: #pragma once
13: #include <slepcvec.h>
14: #include <slepc/private/slepcimpl.h>
16: /* SUBMANSEC = Sys */
18: #if !defined(PETSC_USE_DEBUG)
20: #define SlepcValidVecComp(y,arg) do {(void)(y);} while (0)
21: #define SlepcValidVecsComp(y,n,arg) do {(void)(y);} while (0)
23: #else
25: #define SlepcValidVecComp(y,arg) \
26: do { \
27: PetscCheck(((Vec_Comp*)(y)->data)->nx>=((Vec_Comp*)(y)->data)->n->n,PETSC_COMM_SELF,PETSC_ERR_ARG_WRONGSTATE,"Invalid number of subvectors required: Parameter #%d",arg); \
28: } while (0)
29: #define SlepcValidVecsComp(y,n,arg) \
30: do { \
31: for (PetscInt __i=0;__i<n;__i++) { \
32: PetscCheck(((Vec_Comp*)(y)[__i]->data)->nx>=((Vec_Comp*)(y)[__i]->data)->n->n,PETSC_COMM_SELF,PETSC_ERR_ARG_WRONGSTATE,"Invalid number of subvectors required: Parameter #%d",arg); \
33: } \
34: } while (0)
36: #endif
38: /* Contexts for VecComp */
39: typedef struct {
40: PetscInt n; /* number of active subvectors */
41: PetscInt N; /* virtual global size */
42: PetscInt lN; /* virtual local size */
43: PetscInt friends; /* number of vectors sharing this structure */
44: } Vec_Comp_N;
46: typedef struct {
47: Vec *x; /* the vectors */
48: PetscInt nx; /* number of available subvectors */
49: Vec_Comp_N *n; /* structure shared by friend vectors */
50: } Vec_Comp;
52: /* Operations implemented in VecComp */
53: SLEPC_INTERN PetscErrorCode VecDuplicateVecs_Comp(Vec,PetscInt,Vec*[]);
54: SLEPC_INTERN PetscErrorCode VecDestroyVecs_Comp(PetscInt,Vec[]);
55: SLEPC_INTERN PetscErrorCode VecDuplicate_Comp(Vec,Vec*);
56: SLEPC_INTERN PetscErrorCode VecDestroy_Comp(Vec);
57: SLEPC_INTERN PetscErrorCode VecSet_Comp(Vec,PetscScalar);
58: SLEPC_INTERN PetscErrorCode VecView_Comp(Vec,PetscViewer);
59: SLEPC_INTERN PetscErrorCode VecScale_Comp(Vec,PetscScalar);
60: SLEPC_INTERN PetscErrorCode VecCopy_Comp(Vec,Vec);
61: SLEPC_INTERN PetscErrorCode VecSwap_Comp(Vec,Vec);
62: SLEPC_INTERN PetscErrorCode VecAXPY_Comp(Vec,PetscScalar,Vec);
63: SLEPC_INTERN PetscErrorCode VecAYPX_Comp(Vec,PetscScalar,Vec);
64: SLEPC_INTERN PetscErrorCode VecAXPBY_Comp(Vec,PetscScalar,PetscScalar,Vec);
65: SLEPC_INTERN PetscErrorCode VecMAXPY_Comp(Vec,PetscInt,const PetscScalar*,Vec*);
66: SLEPC_INTERN PetscErrorCode VecWAXPY_Comp(Vec,PetscScalar,Vec,Vec);
67: SLEPC_INTERN PetscErrorCode VecAXPBYPCZ_Comp(Vec,PetscScalar,PetscScalar,PetscScalar,Vec,Vec);
68: SLEPC_INTERN PetscErrorCode VecPointwiseMult_Comp(Vec,Vec,Vec);
69: SLEPC_INTERN PetscErrorCode VecPointwiseDivide_Comp(Vec,Vec,Vec);
70: SLEPC_INTERN PetscErrorCode VecGetSize_Comp(Vec,PetscInt*);
71: SLEPC_INTERN PetscErrorCode VecGetLocalSize_Comp(Vec,PetscInt*);
72: SLEPC_INTERN PetscErrorCode VecMax_Comp(Vec,PetscInt*,PetscReal*);
73: SLEPC_INTERN PetscErrorCode VecMin_Comp(Vec,PetscInt*,PetscReal*);
74: SLEPC_INTERN PetscErrorCode VecSetRandom_Comp(Vec,PetscRandom);
75: SLEPC_INTERN PetscErrorCode VecConjugate_Comp(Vec);
76: SLEPC_INTERN PetscErrorCode VecReciprocal_Comp(Vec);
77: SLEPC_INTERN PetscErrorCode VecMaxPointwiseDivide_Comp(Vec,Vec,PetscReal*);
78: SLEPC_INTERN PetscErrorCode VecPointwiseMax_Comp(Vec,Vec,Vec);
79: SLEPC_INTERN PetscErrorCode VecPointwiseMaxAbs_Comp(Vec,Vec,Vec);
80: SLEPC_INTERN PetscErrorCode VecPointwiseMin_Comp(Vec,Vec,Vec);
81: SLEPC_INTERN PetscErrorCode VecDotNorm2_Comp_Seq(Vec,Vec,PetscScalar*,PetscScalar*);
82: SLEPC_INTERN PetscErrorCode VecDotNorm2_Comp_MPI(Vec,Vec,PetscScalar*,PetscScalar*);
83: SLEPC_INTERN PetscErrorCode VecSqrtAbs_Comp(Vec);
84: SLEPC_INTERN PetscErrorCode VecAbs_Comp(Vec);
85: SLEPC_INTERN PetscErrorCode VecExp_Comp(Vec);
86: SLEPC_INTERN PetscErrorCode VecLog_Comp(Vec);
87: SLEPC_INTERN PetscErrorCode VecShift_Comp(Vec,PetscScalar);
88: SLEPC_EXTERN PetscErrorCode VecCreate_Comp(Vec);
90: /* VecPool */
91: typedef struct VecPool_ {
92: Vec v; /* template vector */
93: Vec *vecs; /* pool of vectors */
94: PetscInt n; /* size of vecs */
95: PetscInt used; /* number of already used vectors */
96: PetscInt guess; /* expected maximum number of vectors */
97: struct VecPool_ *next; /* list of pool of vectors */
98: } VecPool_;
99: typedef VecPool_* VecPool;
101: SLEPC_SINGLE_LIBRARY_INTERN PetscErrorCode SlepcVecPoolCreate(Vec,PetscInt,VecPool*);
102: SLEPC_SINGLE_LIBRARY_INTERN PetscErrorCode SlepcVecPoolDestroy(VecPool*);
103: SLEPC_SINGLE_LIBRARY_INTERN PetscErrorCode SlepcVecPoolGetVecs(VecPool,PetscInt,Vec**);
104: SLEPC_SINGLE_LIBRARY_INTERN PetscErrorCode SlepcVecPoolRestoreVecs(VecPool,PetscInt,Vec**);