| 6 |
dsic.upv.es!jroman |
1 |
/*
|
|
|
2 |
User interface for the SLEPC eigenproblem solvers.
|
|
|
3 |
*/
|
|
|
4 |
#if !defined(__SLEPCEPS_H)
|
|
|
5 |
#define __SLEPCEPS_H
|
|
|
6 |
#include "slepc.h"
|
|
|
7 |
#include "slepcst.h"
|
| 1345 |
slepc |
8 |
#include "slepcip.h"
|
| 476 |
dsic.upv.es!antodo |
9 |
PETSC_EXTERN_CXX_BEGIN
|
| 6 |
dsic.upv.es!jroman |
10 |
|
| 476 |
dsic.upv.es!antodo |
11 |
extern PetscCookie EPS_COOKIE;
|
| 6 |
dsic.upv.es!jroman |
12 |
|
|
|
13 |
/*S
|
|
|
14 |
EPS - Abstract SLEPc object that manages all the eigenvalue
|
|
|
15 |
problem solvers.
|
|
|
16 |
|
|
|
17 |
Level: beginner
|
|
|
18 |
|
|
|
19 |
.seealso: EPSCreate(), ST
|
|
|
20 |
S*/
|
|
|
21 |
typedef struct _p_EPS* EPS;
|
|
|
22 |
|
| 1364 |
slepc |
23 |
/*E
|
|
|
24 |
EPSType - String with the name of a SLEPc eigensolver
|
|
|
25 |
|
|
|
26 |
Level: beginner
|
|
|
27 |
|
|
|
28 |
.seealso: EPSSetType(), EPS
|
|
|
29 |
E*/
|
| 1252 |
slepc |
30 |
#define EPSType const char*
|
| 6 |
dsic.upv.es!jroman |
31 |
#define EPSPOWER "power"
|
|
|
32 |
#define EPSSUBSPACE "subspace"
|
|
|
33 |
#define EPSARNOLDI "arnoldi"
|
| 646 |
dsic.upv.es!antodo |
34 |
#define EPSLANCZOS "lanczos"
|
| 1171 |
slepc |
35 |
#define EPSKRYLOVSCHUR "krylovschur"
|
| 6 |
dsic.upv.es!jroman |
36 |
#define EPSLAPACK "lapack"
|
|
|
37 |
/* the next ones are interfaces to external libraries */
|
|
|
38 |
#define EPSARPACK "arpack"
|
|
|
39 |
#define EPSBLZPACK "blzpack"
|
|
|
40 |
#define EPSTRLAN "trlan"
|
| 1195 |
slepc |
41 |
#define EPSBLOPEX "blopex"
|
| 1187 |
slepc |
42 |
#define EPSPRIMME "primme"
|
| 6 |
dsic.upv.es!jroman |
43 |
|
| 1364 |
slepc |
44 |
/*E
|
|
|
45 |
EPSProblemType - determines the type of eigenvalue problem
|
|
|
46 |
|
|
|
47 |
Level: beginner
|
|
|
48 |
|
|
|
49 |
.seealso: EPSSetProblemType(), EPSGetProblemType()
|
|
|
50 |
E*/
|
| 6 |
dsic.upv.es!jroman |
51 |
typedef enum { EPS_HEP=1, EPS_GHEP,
|
| 1358 |
slepc |
52 |
EPS_NHEP, EPS_GNHEP, EPS_PGNHEP } EPSProblemType;
|
| 6 |
dsic.upv.es!jroman |
53 |
|
| 1364 |
slepc |
54 |
/*E
|
|
|
55 |
EPSClass - determines if the eigensolver is one- or two-sided
|
|
|
56 |
|
|
|
57 |
Level: intermediate
|
|
|
58 |
|
|
|
59 |
.seealso: EPSSetClass(), EPSGetClass()
|
|
|
60 |
E*/
|
| 780 |
dsic.upv.es!jroman |
61 |
typedef enum { EPS_ONE_SIDE, EPS_TWO_SIDE } EPSClass;
|
|
|
62 |
|
| 1364 |
slepc |
63 |
/*E
|
|
|
64 |
EPSWhich - determines which part of the spectrum is requested
|
|
|
65 |
|
|
|
66 |
Level: intermediate
|
|
|
67 |
|
|
|
68 |
.seealso: EPSSetWhichEigenpairs(), EPSGetWhichEigenpairs()
|
|
|
69 |
E*/
|
| 6 |
dsic.upv.es!jroman |
70 |
typedef enum { EPS_LARGEST_MAGNITUDE, EPS_SMALLEST_MAGNITUDE,
|
|
|
71 |
EPS_LARGEST_REAL, EPS_SMALLEST_REAL,
|
| 89 |
dsic.upv.es!antodo |
72 |
EPS_LARGEST_IMAGINARY, EPS_SMALLEST_IMAGINARY } EPSWhich;
|
| 6 |
dsic.upv.es!jroman |
73 |
|
| 476 |
dsic.upv.es!antodo |
74 |
EXTERN PetscErrorCode EPSCreate(MPI_Comm,EPS *);
|
|
|
75 |
EXTERN PetscErrorCode EPSDestroy(EPS);
|
|
|
76 |
EXTERN PetscErrorCode EPSSetType(EPS,EPSType);
|
|
|
77 |
EXTERN PetscErrorCode EPSGetType(EPS,EPSType*);
|
|
|
78 |
EXTERN PetscErrorCode EPSSetProblemType(EPS,EPSProblemType);
|
|
|
79 |
EXTERN PetscErrorCode EPSGetProblemType(EPS,EPSProblemType*);
|
| 780 |
dsic.upv.es!jroman |
80 |
EXTERN PetscErrorCode EPSSetClass(EPS,EPSClass);
|
|
|
81 |
EXTERN PetscErrorCode EPSGetClass(EPS,EPSClass*);
|
| 476 |
dsic.upv.es!antodo |
82 |
EXTERN PetscErrorCode EPSSetOperators(EPS,Mat,Mat);
|
|
|
83 |
EXTERN PetscErrorCode EPSSetFromOptions(EPS);
|
|
|
84 |
EXTERN PetscErrorCode EPSSetUp(EPS);
|
|
|
85 |
EXTERN PetscErrorCode EPSSolve(EPS);
|
|
|
86 |
EXTERN PetscErrorCode EPSView(EPS,PetscViewer);
|
| 6 |
dsic.upv.es!jroman |
87 |
|
| 842 |
dsic.upv.es!antodo |
88 |
EXTERN PetscErrorCode EPSInitializePackage(char *);
|
| 6 |
dsic.upv.es!jroman |
89 |
|
| 476 |
dsic.upv.es!antodo |
90 |
EXTERN PetscErrorCode EPSSetST(EPS,ST);
|
|
|
91 |
EXTERN PetscErrorCode EPSGetST(EPS,ST*);
|
| 1345 |
slepc |
92 |
EXTERN PetscErrorCode EPSSetIP(EPS,IP);
|
|
|
93 |
EXTERN PetscErrorCode EPSGetIP(EPS,IP*);
|
| 476 |
dsic.upv.es!antodo |
94 |
EXTERN PetscErrorCode EPSSetTolerances(EPS,PetscReal,int);
|
|
|
95 |
EXTERN PetscErrorCode EPSGetTolerances(EPS,PetscReal*,int*);
|
|
|
96 |
EXTERN PetscErrorCode EPSSetDimensions(EPS,int,int);
|
|
|
97 |
EXTERN PetscErrorCode EPSGetDimensions(EPS,int*,int*);
|
| 6 |
dsic.upv.es!jroman |
98 |
|
| 476 |
dsic.upv.es!antodo |
99 |
EXTERN PetscErrorCode EPSGetConverged(EPS,int*);
|
|
|
100 |
EXTERN PetscErrorCode EPSGetEigenpair(EPS,int,PetscScalar*,PetscScalar*,Vec,Vec);
|
| 780 |
dsic.upv.es!jroman |
101 |
EXTERN PetscErrorCode EPSGetValue(EPS,int,PetscScalar*,PetscScalar*);
|
|
|
102 |
EXTERN PetscErrorCode EPSGetRightVector(EPS,int,Vec,Vec);
|
|
|
103 |
EXTERN PetscErrorCode EPSGetLeftVector(EPS,int,Vec,Vec);
|
| 476 |
dsic.upv.es!antodo |
104 |
EXTERN PetscErrorCode EPSComputeRelativeError(EPS,int,PetscReal*);
|
| 780 |
dsic.upv.es!jroman |
105 |
EXTERN PetscErrorCode EPSComputeRelativeErrorLeft(EPS,int,PetscReal*);
|
| 476 |
dsic.upv.es!antodo |
106 |
EXTERN PetscErrorCode EPSComputeResidualNorm(EPS,int,PetscReal*);
|
| 780 |
dsic.upv.es!jroman |
107 |
EXTERN PetscErrorCode EPSComputeResidualNormLeft(EPS,int,PetscReal*);
|
| 476 |
dsic.upv.es!antodo |
108 |
EXTERN PetscErrorCode EPSGetInvariantSubspace(EPS,Vec*);
|
| 780 |
dsic.upv.es!jroman |
109 |
EXTERN PetscErrorCode EPSGetLeftInvariantSubspace(EPS,Vec*);
|
| 476 |
dsic.upv.es!antodo |
110 |
EXTERN PetscErrorCode EPSGetErrorEstimate(EPS,int,PetscReal*);
|
| 780 |
dsic.upv.es!jroman |
111 |
EXTERN PetscErrorCode EPSGetErrorEstimateLeft(EPS,int,PetscReal*);
|
| 6 |
dsic.upv.es!jroman |
112 |
|
| 1331 |
slepc |
113 |
EXTERN PetscErrorCode EPSMonitorSet(EPS,PetscErrorCode (*)(EPS,int,int,PetscScalar*,PetscScalar*,PetscReal*,int,void*),
|
| 1287 |
slepc |
114 |
void*,PetscErrorCode (*monitordestroy)(void*));
|
| 1331 |
slepc |
115 |
EXTERN PetscErrorCode EPSMonitorCancel(EPS);
|
| 476 |
dsic.upv.es!antodo |
116 |
EXTERN PetscErrorCode EPSGetMonitorContext(EPS,void **);
|
|
|
117 |
EXTERN PetscErrorCode EPSGetIterationNumber(EPS,int*);
|
| 1209 |
slepc |
118 |
EXTERN PetscErrorCode EPSGetOperationCounters(EPS,int*,int*,int*);
|
| 6 |
dsic.upv.es!jroman |
119 |
|
| 476 |
dsic.upv.es!antodo |
120 |
EXTERN PetscErrorCode EPSSetInitialVector(EPS,Vec);
|
| 1343 |
slepc |
121 |
EXTERN PetscErrorCode EPSGetInitialVector(EPS,int,Vec*);
|
| 780 |
dsic.upv.es!jroman |
122 |
EXTERN PetscErrorCode EPSSetLeftInitialVector(EPS,Vec);
|
| 1343 |
slepc |
123 |
EXTERN PetscErrorCode EPSGetLeftInitialVector(EPS,int,Vec*);
|
|
|
124 |
EXTERN PetscErrorCode EPSClearInitialVectors(EPS);
|
|
|
125 |
EXTERN PetscErrorCode EPSGetNumberInitialVectors(EPS,int*,int*);
|
|
|
126 |
|
| 476 |
dsic.upv.es!antodo |
127 |
EXTERN PetscErrorCode EPSSetWhichEigenpairs(EPS,EPSWhich);
|
|
|
128 |
EXTERN PetscErrorCode EPSGetWhichEigenpairs(EPS,EPSWhich*);
|
|
|
129 |
EXTERN PetscErrorCode EPSIsGeneralized(EPS,PetscTruth*);
|
|
|
130 |
EXTERN PetscErrorCode EPSIsHermitian(EPS,PetscTruth*);
|
| 6 |
dsic.upv.es!jroman |
131 |
|
| 1331 |
slepc |
132 |
EXTERN PetscErrorCode EPSMonitorDefault(EPS,int,int,PetscScalar*,PetscScalar*,PetscReal*,int,void*);
|
|
|
133 |
EXTERN PetscErrorCode EPSMonitorLG(EPS,int,int,PetscScalar*,PetscScalar*,PetscReal*,int,void*);
|
| 6 |
dsic.upv.es!jroman |
134 |
|
| 780 |
dsic.upv.es!jroman |
135 |
EXTERN PetscErrorCode EPSAttachDeflationSpace(EPS,int,Vec*,PetscTruth);
|
|
|
136 |
EXTERN PetscErrorCode EPSRemoveDeflationSpace(EPS);
|
|
|
137 |
|
| 1248 |
slepc |
138 |
EXTERN PetscErrorCode EPSSetOptionsPrefix(EPS,const char*);
|
|
|
139 |
EXTERN PetscErrorCode EPSAppendOptionsPrefix(EPS,const char*);
|
| 812 |
dsic.upv.es!antodo |
140 |
EXTERN PetscErrorCode EPSGetOptionsPrefix(EPS,const char*[]);
|
| 6 |
dsic.upv.es!jroman |
141 |
|
| 1364 |
slepc |
142 |
/*E
|
|
|
143 |
EPSConvergedReason - reason an eigensolver was said to
|
|
|
144 |
have converged or diverged
|
|
|
145 |
|
|
|
146 |
Level: beginner
|
|
|
147 |
|
|
|
148 |
.seealso: EPSSolve(), EPSGetConvergedReason(), EPSSetTolerances()
|
|
|
149 |
E*/
|
| 6 |
dsic.upv.es!jroman |
150 |
typedef enum {/* converged */
|
|
|
151 |
EPS_CONVERGED_TOL = 2,
|
|
|
152 |
/* diverged */
|
|
|
153 |
EPS_DIVERGED_ITS = -3,
|
|
|
154 |
EPS_DIVERGED_BREAKDOWN = -4,
|
|
|
155 |
EPS_DIVERGED_NONSYMMETRIC = -5,
|
|
|
156 |
EPS_CONVERGED_ITERATING = 0} EPSConvergedReason;
|
|
|
157 |
|
| 476 |
dsic.upv.es!antodo |
158 |
EXTERN PetscErrorCode EPSGetConvergedReason(EPS,EPSConvergedReason *);
|
| 6 |
dsic.upv.es!jroman |
159 |
|
| 476 |
dsic.upv.es!antodo |
160 |
EXTERN PetscErrorCode EPSSortEigenvalues(int,PetscScalar*,PetscScalar*,EPSWhich,int,int*);
|
| 780 |
dsic.upv.es!jroman |
161 |
EXTERN PetscErrorCode EPSDenseNHEP(int,PetscScalar*,PetscScalar*,PetscScalar*,PetscScalar*,PetscScalar*);
|
|
|
162 |
EXTERN PetscErrorCode EPSDenseGNHEP(int,PetscScalar*,PetscScalar*,PetscScalar*,PetscScalar*,PetscScalar*,PetscScalar*);
|
| 1175 |
slepc |
163 |
EXTERN PetscErrorCode EPSDenseHEP(int,PetscScalar*,int,PetscReal*,PetscScalar*);
|
| 676 |
dsic.upv.es!antodo |
164 |
EXTERN PetscErrorCode EPSDenseGHEP(int,PetscScalar*,PetscScalar*,PetscReal*,PetscScalar*);
|
| 1175 |
slepc |
165 |
EXTERN PetscErrorCode EPSDenseHessenberg(int,int,PetscScalar*,int,PetscScalar*);
|
| 1057 |
slepc |
166 |
EXTERN PetscErrorCode EPSDenseSchur(int,int,PetscScalar*,int,PetscScalar*,PetscScalar*,PetscScalar*);
|
| 1174 |
slepc |
167 |
EXTERN PetscErrorCode EPSSortDenseSchur(int,int,PetscScalar*,int,PetscScalar*,PetscScalar*,PetscScalar*,EPSWhich);
|
| 1175 |
slepc |
168 |
EXTERN PetscErrorCode EPSDenseTridiagonal(int,PetscScalar*,int,PetscReal*,PetscScalar*);
|
| 676 |
dsic.upv.es!antodo |
169 |
|
| 1057 |
slepc |
170 |
EXTERN PetscErrorCode EPSGetStartVector(EPS,int,Vec,PetscTruth*);
|
| 780 |
dsic.upv.es!jroman |
171 |
EXTERN PetscErrorCode EPSGetLeftStartVector(EPS,int,Vec);
|
| 6 |
dsic.upv.es!jroman |
172 |
|
|
|
173 |
/* --------- options specific to particular eigensolvers -------- */
|
|
|
174 |
|
| 1364 |
slepc |
175 |
/*E
|
|
|
176 |
EPSPowerShiftType - determines the type of shift used in the Power iteration
|
|
|
177 |
|
|
|
178 |
Level: advanced
|
|
|
179 |
|
|
|
180 |
.seealso: EPSPowerSetShiftType(), EPSPowerGetShiftType()
|
|
|
181 |
E*/
|
| 444 |
dsic.upv.es!antodo |
182 |
typedef enum { EPSPOWER_SHIFT_CONSTANT, EPSPOWER_SHIFT_RAYLEIGH,
|
|
|
183 |
EPSPOWER_SHIFT_WILKINSON } EPSPowerShiftType;
|
|
|
184 |
|
| 476 |
dsic.upv.es!antodo |
185 |
EXTERN PetscErrorCode EPSPowerSetShiftType(EPS,EPSPowerShiftType);
|
|
|
186 |
EXTERN PetscErrorCode EPSPowerGetShiftType(EPS,EPSPowerShiftType*);
|
| 444 |
dsic.upv.es!antodo |
187 |
|
| 1098 |
slepc |
188 |
EXTERN PetscErrorCode EPSArnoldiSetDelayed(EPS,PetscTruth);
|
|
|
189 |
EXTERN PetscErrorCode EPSArnoldiGetDelayed(EPS,PetscTruth*);
|
|
|
190 |
|
| 1364 |
slepc |
191 |
/*E
|
|
|
192 |
EPSLanczosReorthogType - determines the type of reorthogonalization
|
|
|
193 |
used in the Lanczos method
|
|
|
194 |
|
|
|
195 |
Level: advanced
|
|
|
196 |
|
|
|
197 |
.seealso: EPSLanczosSetReorthog(), EPSLanczosGetReorthog()
|
|
|
198 |
E*/
|
| 1068 |
slepc |
199 |
typedef enum { EPSLANCZOS_REORTHOG_LOCAL,
|
| 961 |
dsic.upv.es!jroman |
200 |
EPSLANCZOS_REORTHOG_FULL,
|
|
|
201 |
EPSLANCZOS_REORTHOG_SELECTIVE,
|
|
|
202 |
EPSLANCZOS_REORTHOG_PERIODIC,
|
| 1124 |
slepc |
203 |
EPSLANCZOS_REORTHOG_PARTIAL,
|
| 1173 |
slepc |
204 |
EPSLANCZOS_REORTHOG_DELAYED } EPSLanczosReorthogType;
|
| 673 |
dsic.upv.es!antodo |
205 |
|
| 905 |
dsic.upv.es!antodo |
206 |
EXTERN PetscErrorCode EPSLanczosSetReorthog(EPS,EPSLanczosReorthogType);
|
|
|
207 |
EXTERN PetscErrorCode EPSLanczosGetReorthog(EPS,EPSLanczosReorthogType*);
|
| 673 |
dsic.upv.es!antodo |
208 |
|
| 476 |
dsic.upv.es!antodo |
209 |
EXTERN PetscErrorCode EPSBlzpackSetBlockSize(EPS,int);
|
|
|
210 |
EXTERN PetscErrorCode EPSBlzpackSetInterval(EPS,PetscReal,PetscReal);
|
|
|
211 |
EXTERN PetscErrorCode EPSBlzpackSetNSteps(EPS,int);
|
| 6 |
dsic.upv.es!jroman |
212 |
|
| 1364 |
slepc |
213 |
/*E
|
|
|
214 |
EPSPRIMMEMethod - determines the method selected in the PRIMME library
|
|
|
215 |
|
|
|
216 |
Level: advanced
|
|
|
217 |
|
|
|
218 |
.seealso: EPSPRIMMESetMethod(), EPSPRIMMEGetMethod()
|
|
|
219 |
E*/
|
| 1187 |
slepc |
220 |
typedef enum {
|
| 1239 |
slepc |
221 |
EPSPRIMME_DYNAMIC,
|
| 1187 |
slepc |
222 |
EPSPRIMME_DEFAULT_MIN_TIME,
|
|
|
223 |
EPSPRIMME_DEFAULT_MIN_MATVECS,
|
| 1190 |
slepc |
224 |
EPSPRIMME_ARNOLDI,
|
| 1187 |
slepc |
225 |
EPSPRIMME_GD,
|
| 1190 |
slepc |
226 |
EPSPRIMME_GD_PLUSK,
|
|
|
227 |
EPSPRIMME_GD_OLSEN_PLUSK,
|
| 1239 |
slepc |
228 |
EPSPRIMME_JD_OLSEN_PLUSK,
|
| 1187 |
slepc |
229 |
EPSPRIMME_RQI,
|
|
|
230 |
EPSPRIMME_JDQR,
|
|
|
231 |
EPSPRIMME_JDQMR,
|
| 1190 |
slepc |
232 |
EPSPRIMME_JDQMR_ETOL,
|
| 1187 |
slepc |
233 |
EPSPRIMME_SUBSPACE_ITERATION,
|
| 1190 |
slepc |
234 |
EPSPRIMME_LOBPCG_ORTHOBASIS,
|
|
|
235 |
EPSPRIMME_LOBPCG_ORTHOBASIS_WINDOW
|
|
|
236 |
} EPSPRIMMEMethod;
|
| 1187 |
slepc |
237 |
|
| 1364 |
slepc |
238 |
/*E
|
|
|
239 |
EPSPRIMMEPrecond - determines the type of preconditioning
|
|
|
240 |
used in the PRIMME library
|
|
|
241 |
|
|
|
242 |
Level: advanced
|
|
|
243 |
|
|
|
244 |
.seealso: EPSPRIMMESetPrecond(), EPSPRIMMEGetPrecond()
|
|
|
245 |
E*/
|
| 1190 |
slepc |
246 |
typedef enum {
|
|
|
247 |
EPSPRIMME_NONE,
|
|
|
248 |
EPSPRIMME_DIAGONAL
|
|
|
249 |
} EPSPRIMMEPrecond;
|
|
|
250 |
|
| 1187 |
slepc |
251 |
EXTERN PetscErrorCode EPSPRIMMESetBlockSize(EPS eps,int bs);
|
| 1190 |
slepc |
252 |
EXTERN PetscErrorCode EPSPRIMMESetMethod(EPS eps, EPSPRIMMEMethod method);
|
|
|
253 |
EXTERN PetscErrorCode EPSPRIMMESetPrecond(EPS eps, EPSPRIMMEPrecond precond);
|
| 1187 |
slepc |
254 |
EXTERN PetscErrorCode EPSPRIMMEGetBlockSize(EPS eps,int *bs);
|
| 1190 |
slepc |
255 |
EXTERN PetscErrorCode EPSPRIMMEGetMethod(EPS eps, EPSPRIMMEMethod *method);
|
|
|
256 |
EXTERN PetscErrorCode EPSPRIMMEGetPrecond(EPS eps, EPSPRIMMEPrecond *precond);
|
| 1187 |
slepc |
257 |
|
| 476 |
dsic.upv.es!antodo |
258 |
PETSC_EXTERN_CXX_END
|
| 6 |
dsic.upv.es!jroman |
259 |
#endif
|
|
|
260 |
|