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