Actual source code: slepceps.h
1: /*
2: User interface for the SLEPC eigenproblem solvers.
3: */
6: #include slepc.h
7: #include slepcst.h
12: /*S
13: EPS - Abstract SLEPc object that manages all the eigenvalue
14: problem solvers.
16: Level: beginner
18: Concepts: eigen solvers
20: .seealso: EPSCreate(), ST
21: S*/
22: typedef struct _p_EPS* EPS;
24: #define EPSPOWER "power"
25: #define EPSSUBSPACE "subspace"
26: #define EPSARNOLDI "arnoldi"
27: #define EPSLANCZOS "lanczos"
28: #define EPSKRYLOVSCHUR "krylovschur"
29: #define EPSLAPACK "lapack"
30: /* the next ones are interfaces to external libraries */
31: #define EPSARPACK "arpack"
32: #define EPSBLZPACK "blzpack"
33: #define EPSTRLAN "trlan"
34: #define EPSBLOPEX "blopex"
35: #define EPSType const char*
36: #define EPSPRIMME "primme"
38: typedef enum { EPS_HEP=1, EPS_GHEP,
39: EPS_NHEP, EPS_GNHEP } EPSProblemType;
41: typedef enum { EPS_ONE_SIDE, EPS_TWO_SIDE } EPSClass;
43: typedef enum { EPS_LARGEST_MAGNITUDE, EPS_SMALLEST_MAGNITUDE,
44: EPS_LARGEST_REAL, EPS_SMALLEST_REAL,
45: EPS_LARGEST_IMAGINARY, EPS_SMALLEST_IMAGINARY } EPSWhich;
47: typedef enum { EPS_MGS_ORTH, EPS_CGS_ORTH } EPSOrthogonalizationType;
48: typedef enum { EPS_ORTH_REFINE_NEVER, EPS_ORTH_REFINE_IFNEEDED,
49: EPS_ORTH_REFINE_ALWAYS } EPSOrthogonalizationRefinementType;
51: EXTERN PetscErrorCode EPSCreate(MPI_Comm,EPS *);
52: EXTERN PetscErrorCode EPSDestroy(EPS);
53: EXTERN PetscErrorCode EPSSetType(EPS,EPSType);
54: EXTERN PetscErrorCode EPSGetType(EPS,EPSType*);
55: EXTERN PetscErrorCode EPSSetProblemType(EPS,EPSProblemType);
56: EXTERN PetscErrorCode EPSGetProblemType(EPS,EPSProblemType*);
57: EXTERN PetscErrorCode EPSSetClass(EPS,EPSClass);
58: EXTERN PetscErrorCode EPSGetClass(EPS,EPSClass*);
59: EXTERN PetscErrorCode EPSSetOperators(EPS,Mat,Mat);
60: EXTERN PetscErrorCode EPSSetFromOptions(EPS);
61: EXTERN PetscErrorCode EPSSetUp(EPS);
62: EXTERN PetscErrorCode EPSSolve(EPS);
63: EXTERN PetscErrorCode EPSView(EPS,PetscViewer);
65: EXTERN PetscErrorCode EPSInitializePackage(char *);
67: EXTERN PetscErrorCode EPSSetST(EPS,ST);
68: EXTERN PetscErrorCode EPSGetST(EPS,ST*);
69: EXTERN PetscErrorCode EPSSetTolerances(EPS,PetscReal,int);
70: EXTERN PetscErrorCode EPSGetTolerances(EPS,PetscReal*,int*);
71: EXTERN PetscErrorCode EPSSetDimensions(EPS,int,int);
72: EXTERN PetscErrorCode EPSGetDimensions(EPS,int*,int*);
74: EXTERN PetscErrorCode EPSGetConverged(EPS,int*);
75: EXTERN PetscErrorCode EPSGetEigenpair(EPS,int,PetscScalar*,PetscScalar*,Vec,Vec);
76: EXTERN PetscErrorCode EPSGetValue(EPS,int,PetscScalar*,PetscScalar*);
77: EXTERN PetscErrorCode EPSGetRightVector(EPS,int,Vec,Vec);
78: EXTERN PetscErrorCode EPSGetLeftVector(EPS,int,Vec,Vec);
79: EXTERN PetscErrorCode EPSComputeRelativeError(EPS,int,PetscReal*);
80: EXTERN PetscErrorCode EPSComputeRelativeErrorLeft(EPS,int,PetscReal*);
81: EXTERN PetscErrorCode EPSComputeResidualNorm(EPS,int,PetscReal*);
82: EXTERN PetscErrorCode EPSComputeResidualNormLeft(EPS,int,PetscReal*);
83: EXTERN PetscErrorCode EPSGetInvariantSubspace(EPS,Vec*);
84: EXTERN PetscErrorCode EPSGetLeftInvariantSubspace(EPS,Vec*);
85: EXTERN PetscErrorCode EPSGetErrorEstimate(EPS,int,PetscReal*);
86: EXTERN PetscErrorCode EPSGetErrorEstimateLeft(EPS,int,PetscReal*);
88: EXTERN PetscErrorCode EPSSetMonitor(EPS,int (*)(EPS,int,int,PetscScalar*,PetscScalar*,PetscReal*,int,void*),void*);
89: EXTERN PetscErrorCode EPSClearMonitor(EPS);
90: EXTERN PetscErrorCode EPSGetMonitorContext(EPS,void **);
91: EXTERN PetscErrorCode EPSGetIterationNumber(EPS,int*);
92: EXTERN PetscErrorCode EPSGetOperationCounters(EPS,int*,int*,int*);
94: EXTERN PetscErrorCode EPSSetInitialVector(EPS,Vec);
95: EXTERN PetscErrorCode EPSGetInitialVector(EPS,Vec*);
96: EXTERN PetscErrorCode EPSSetLeftInitialVector(EPS,Vec);
97: EXTERN PetscErrorCode EPSGetLeftInitialVector(EPS,Vec*);
98: EXTERN PetscErrorCode EPSSetWhichEigenpairs(EPS,EPSWhich);
99: EXTERN PetscErrorCode EPSGetWhichEigenpairs(EPS,EPSWhich*);
100: EXTERN PetscErrorCode EPSSetOrthogonalization(EPS,EPSOrthogonalizationType,EPSOrthogonalizationRefinementType,PetscReal);
101: EXTERN PetscErrorCode EPSGetOrthogonalization(EPS,EPSOrthogonalizationType*,EPSOrthogonalizationRefinementType*,PetscReal*);
102: EXTERN PetscErrorCode EPSIsGeneralized(EPS,PetscTruth*);
103: EXTERN PetscErrorCode EPSIsHermitian(EPS,PetscTruth*);
105: EXTERN PetscErrorCode EPSDefaultMonitor(EPS,int,int,PetscScalar*,PetscScalar*,PetscReal*,int,void*);
106: EXTERN PetscErrorCode EPSLGMonitor(EPS,int,int,PetscScalar*,PetscScalar*,PetscReal*,int,void*);
108: EXTERN PetscErrorCode EPSAttachDeflationSpace(EPS,int,Vec*,PetscTruth);
109: EXTERN PetscErrorCode EPSRemoveDeflationSpace(EPS);
111: EXTERN PetscErrorCode EPSSetOptionsPrefix(EPS,char*);
112: EXTERN PetscErrorCode EPSAppendOptionsPrefix(EPS,char*);
113: EXTERN PetscErrorCode EPSGetOptionsPrefix(EPS,const char*[]);
115: typedef enum {/* converged */
116: EPS_CONVERGED_TOL = 2,
117: /* diverged */
118: EPS_DIVERGED_ITS = -3,
119: EPS_DIVERGED_BREAKDOWN = -4,
120: EPS_DIVERGED_NONSYMMETRIC = -5,
121: EPS_CONVERGED_ITERATING = 0} EPSConvergedReason;
123: EXTERN PetscErrorCode EPSGetConvergedReason(EPS,EPSConvergedReason *);
125: EXTERN PetscErrorCode EPSSortEigenvalues(int,PetscScalar*,PetscScalar*,EPSWhich,int,int*);
126: EXTERN PetscErrorCode EPSDenseNHEP(int,PetscScalar*,PetscScalar*,PetscScalar*,PetscScalar*,PetscScalar*);
127: EXTERN PetscErrorCode EPSDenseGNHEP(int,PetscScalar*,PetscScalar*,PetscScalar*,PetscScalar*,PetscScalar*,PetscScalar*);
128: EXTERN PetscErrorCode EPSDenseHEP(int,PetscScalar*,int,PetscReal*,PetscScalar*);
129: EXTERN PetscErrorCode EPSDenseGHEP(int,PetscScalar*,PetscScalar*,PetscReal*,PetscScalar*);
130: EXTERN PetscErrorCode EPSDenseHessenberg(int,int,PetscScalar*,int,PetscScalar*);
131: EXTERN PetscErrorCode EPSDenseSchur(int,int,PetscScalar*,int,PetscScalar*,PetscScalar*,PetscScalar*);
132: EXTERN PetscErrorCode EPSSortDenseSchur(int,int,PetscScalar*,int,PetscScalar*,PetscScalar*,PetscScalar*,EPSWhich);
133: EXTERN PetscErrorCode EPSDenseTridiagonal(int,PetscScalar*,int,PetscReal*,PetscScalar*);
135: EXTERN PetscErrorCode EPSOrthogonalize(EPS,int,PetscTruth*,Vec*,Vec,PetscScalar*,PetscReal*,PetscTruth*);
136: EXTERN PetscErrorCode EPSBiOrthogonalize(EPS,int,Vec*,Vec*,Vec,PetscScalar*,PetscReal*);
137: EXTERN PetscErrorCode EPSQRDecomposition(EPS,Vec*,int,int,PetscScalar*,int);
138: EXTERN PetscErrorCode EPSGetStartVector(EPS,int,Vec,PetscTruth*);
139: EXTERN PetscErrorCode EPSGetLeftStartVector(EPS,int,Vec);
141: /* --------- options specific to particular eigensolvers -------- */
143: typedef enum { EPSPOWER_SHIFT_CONSTANT, EPSPOWER_SHIFT_RAYLEIGH,
144: EPSPOWER_SHIFT_WILKINSON } EPSPowerShiftType;
146: EXTERN PetscErrorCode EPSPowerSetShiftType(EPS,EPSPowerShiftType);
147: EXTERN PetscErrorCode EPSPowerGetShiftType(EPS,EPSPowerShiftType*);
149: EXTERN PetscErrorCode EPSArnoldiSetDelayed(EPS,PetscTruth);
150: EXTERN PetscErrorCode EPSArnoldiGetDelayed(EPS,PetscTruth*);
152: typedef enum { EPSLANCZOS_REORTHOG_LOCAL,
153: EPSLANCZOS_REORTHOG_FULL,
154: EPSLANCZOS_REORTHOG_SELECTIVE,
155: EPSLANCZOS_REORTHOG_PERIODIC,
156: EPSLANCZOS_REORTHOG_PARTIAL,
157: EPSLANCZOS_REORTHOG_DELAYED } EPSLanczosReorthogType;
159: EXTERN PetscErrorCode EPSLanczosSetReorthog(EPS,EPSLanczosReorthogType);
160: EXTERN PetscErrorCode EPSLanczosGetReorthog(EPS,EPSLanczosReorthogType*);
162: EXTERN PetscErrorCode EPSBlzpackSetBlockSize(EPS,int);
163: EXTERN PetscErrorCode EPSBlzpackSetInterval(EPS,PetscReal,PetscReal);
164: EXTERN PetscErrorCode EPSBlzpackSetNSteps(EPS,int);
166: typedef enum {
167: EPSPRIMME_DEFAULT_MIN_TIME,
168: EPSPRIMME_DEFAULT_MIN_MATVECS,
169: EPSPRIMME_ARNOLDI,
170: EPSPRIMME_GD,
171: EPSPRIMME_GD_PLUSK,
172: EPSPRIMME_GD_OLSEN_PLUSK,
173: EPSPRIMME_JD_OlSEN_PLUSK,
174: EPSPRIMME_RQI,
175: EPSPRIMME_JDQR,
176: EPSPRIMME_JDQMR,
177: EPSPRIMME_JDQMR_ETOL,
178: EPSPRIMME_SUBSPACE_ITERATION,
179: EPSPRIMME_LOBPCG_ORTHOBASIS,
180: EPSPRIMME_LOBPCG_ORTHOBASIS_WINDOW
181: } EPSPRIMMEMethod;
183: typedef enum {
184: EPSPRIMME_NONE,
185: EPSPRIMME_DIAGONAL
186: } EPSPRIMMEPrecond;
188: EXTERN PetscErrorCode EPSPRIMMESetBlockSize(EPS eps,int bs);
189: EXTERN PetscErrorCode EPSPRIMMESetMethod(EPS eps, EPSPRIMMEMethod method);
190: EXTERN PetscErrorCode EPSPRIMMESetPrecond(EPS eps, EPSPRIMMEPrecond precond);
191: EXTERN PetscErrorCode EPSPRIMMEGetBlockSize(EPS eps,int *bs);
192: EXTERN PetscErrorCode EPSPRIMMEGetMethod(EPS eps, EPSPRIMMEMethod *method);
193: EXTERN PetscErrorCode EPSPRIMMEGetPrecond(EPS eps, EPSPRIMMEPrecond *precond);
196: #endif