Subversion Repositories slepc-dev

Rev

Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
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