Actual source code: vecimplslepc.h
slepc-3.8.3 2018-04-03
1: /*
2: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
3: SLEPc - Scalable Library for Eigenvalue Problem Computations
4: Copyright (c) 2002-2017, 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: #ifndef _VECIMPLSLEPC
12: #define _VECIMPLSLEPC
14: #include <slepcvec.h>
15: #include <slepc/private/slepcimpl.h>
17: #if !defined(PETSC_USE_DEBUG)
19: #define SlepcValidVecComp(y,arg) do {} while (0)
21: #else
23: #define SlepcValidVecComp(y,arg) \
24: do { \
25: if (((Vec_Comp*)(y)->data)->nx < ((Vec_Comp*)(y)->data)->n->n) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONGSTATE,"Invalid number of subvectors required: Parameter #%d",arg); \
26: } while (0)
28: #endif
30: /* Contexts for VecComp */
31: typedef struct {
32: PetscInt n; /* number of active subvectors */
33: PetscInt N; /* virtual global size */
34: PetscInt lN; /* virtual local size */
35: PetscInt friends; /* number of vectors sharing this structure */
36: } Vec_Comp_N;
38: typedef struct {
39: Vec *x; /* the vectors */
40: PetscInt nx; /* number of available subvectors */
41: Vec_Comp_N *n; /* structure shared by friend vectors */
42: } Vec_Comp;
44: /* Operations implemented in VecComp */
45: PETSC_INTERN PetscErrorCode VecDuplicateVecs_Comp(Vec,PetscInt,Vec*[]);
46: PETSC_INTERN PetscErrorCode VecDestroyVecs_Comp(PetscInt,Vec[]);
47: PETSC_INTERN PetscErrorCode VecDuplicate_Comp(Vec,Vec*);
48: PETSC_INTERN PetscErrorCode VecDestroy_Comp(Vec);
49: PETSC_INTERN PetscErrorCode VecSet_Comp(Vec,PetscScalar);
50: PETSC_INTERN PetscErrorCode VecView_Comp(Vec,PetscViewer);
51: PETSC_INTERN PetscErrorCode VecScale_Comp(Vec,PetscScalar);
52: PETSC_INTERN PetscErrorCode VecCopy_Comp(Vec,Vec);
53: PETSC_INTERN PetscErrorCode VecSwap_Comp(Vec,Vec);
54: PETSC_INTERN PetscErrorCode VecAXPY_Comp(Vec,PetscScalar,Vec);
55: PETSC_INTERN PetscErrorCode VecAYPX_Comp(Vec,PetscScalar,Vec);
56: PETSC_INTERN PetscErrorCode VecAXPBY_Comp(Vec,PetscScalar,PetscScalar,Vec);
57: PETSC_INTERN PetscErrorCode VecMAXPY_Comp(Vec,PetscInt,const PetscScalar*,Vec*);
58: PETSC_INTERN PetscErrorCode VecWAXPY_Comp(Vec,PetscScalar,Vec,Vec);
59: PETSC_INTERN PetscErrorCode VecAXPBYPCZ_Comp(Vec,PetscScalar,PetscScalar,PetscScalar,Vec,Vec);
60: PETSC_INTERN PetscErrorCode VecPointwiseMult_Comp(Vec,Vec,Vec);
61: PETSC_INTERN PetscErrorCode VecPointwiseDivide_Comp(Vec,Vec,Vec);
62: PETSC_INTERN PetscErrorCode VecGetSize_Comp(Vec,PetscInt*);
63: PETSC_INTERN PetscErrorCode VecGetLocalSize_Comp(Vec,PetscInt*);
64: PETSC_INTERN PetscErrorCode VecMax_Comp(Vec,PetscInt*,PetscReal*);
65: PETSC_INTERN PetscErrorCode VecMin_Comp(Vec,PetscInt*,PetscReal*);
66: PETSC_INTERN PetscErrorCode VecSetRandom_Comp(Vec,PetscRandom);
67: PETSC_INTERN PetscErrorCode VecConjugate_Comp(Vec);
68: PETSC_INTERN PetscErrorCode VecReciprocal_Comp(Vec);
69: PETSC_INTERN PetscErrorCode VecMaxPointwiseDivide_Comp(Vec,Vec,PetscReal*);
70: PETSC_INTERN PetscErrorCode VecPointwiseMax_Comp(Vec,Vec,Vec);
71: PETSC_INTERN PetscErrorCode VecPointwiseMaxAbs_Comp(Vec,Vec,Vec);
72: PETSC_INTERN PetscErrorCode VecPointwiseMin_Comp(Vec,Vec,Vec);
73: PETSC_INTERN PetscErrorCode VecDotNorm2_Comp_Seq(Vec,Vec,PetscScalar*,PetscScalar*);
74: PETSC_INTERN PetscErrorCode VecDotNorm2_Comp_MPI(Vec,Vec,PetscScalar*,PetscScalar*);
75: PETSC_INTERN PetscErrorCode VecSqrtAbs_Comp(Vec);
76: PETSC_INTERN PetscErrorCode VecAbs_Comp(Vec);
77: PETSC_INTERN PetscErrorCode VecExp_Comp(Vec);
78: PETSC_INTERN PetscErrorCode VecLog_Comp(Vec);
79: PETSC_INTERN PetscErrorCode VecShift_Comp(Vec,PetscScalar);
80: PETSC_EXTERN PetscErrorCode VecCreate_Comp(Vec);
82: /* Definitions and structures for BLAS-type operations in Davidson solvers */
84: typedef PetscInt MatType_t;
85: #define DVD_MAT_HERMITIAN (1<<1)
86: #define DVD_MAT_NEG_DEF (1<<2)
87: #define DVD_MAT_POS_DEF (1<<3)
88: #define DVD_MAT_SINGULAR (1<<4)
89: #define DVD_MAT_COMPLEX (1<<5)
90: #define DVD_MAT_IMPLICIT (1<<6)
91: #define DVD_MAT_IDENTITY (1<<7)
92: #define DVD_MAT_DIAG (1<<8)
93: #define DVD_MAT_TRIANG (1<<9)
94: #define DVD_MAT_UTRIANG (1<<9)
95: #define DVD_MAT_LTRIANG (1<<10)
96: #define DVD_MAT_UNITARY (1<<11)
98: typedef PetscInt EPType_t;
99: #define DVD_EP_STD (1<<1)
100: #define DVD_EP_HERMITIAN (1<<2)
101: #define DVD_EP_INDEFINITE (1<<3)
103: #define DVD_IS(T,P) ((T) & (P))
104: #define DVD_ISNOT(T,P) (((T) & (P)) ^ (P))
106: /* VecPool */
107: typedef struct VecPool_ {
108: Vec v; /* template vector */
109: Vec *vecs; /* pool of vectors */
110: PetscInt n; /* size of vecs */
111: PetscInt used; /* number of already used vectors */
112: PetscInt guess; /* expected maximum number of vectors */
113: struct VecPool_ *next; /* list of pool of vectors */
114: } VecPool_;
115: typedef VecPool_* VecPool;
117: PETSC_EXTERN PetscErrorCode SlepcVecPoolCreate(Vec,PetscInt,VecPool*);
118: PETSC_EXTERN PetscErrorCode SlepcVecPoolDestroy(VecPool*);
119: PETSC_EXTERN PetscErrorCode SlepcVecPoolGetVecs(VecPool,PetscInt,Vec**);
120: PETSC_EXTERN PetscErrorCode SlepcVecPoolRestoreVecs(VecPool,PetscInt,Vec**);
121: #endif