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 EPSLAPACK    "lapack"
 29: /* the next ones are interfaces to external libraries */
 30: #define EPSARPACK    "arpack"
 31: #define EPSBLZPACK   "blzpack"
 32: #define EPSPLANSO    "planso"
 33: #define EPSTRLAN     "trlan"
 34: #define EPSLOBPCG    "lobpcg"
 35: #define EPSType const char*

 37: typedef enum { EPS_HEP=1,  EPS_GHEP,
 38:                EPS_NHEP,   EPS_GNHEP } EPSProblemType;

 40: typedef enum { EPS_ONE_SIDE, EPS_TWO_SIDE } EPSClass;

 42: typedef enum { EPS_LARGEST_MAGNITUDE, EPS_SMALLEST_MAGNITUDE,
 43:                EPS_LARGEST_REAL,      EPS_SMALLEST_REAL,
 44:                EPS_LARGEST_IMAGINARY, EPS_SMALLEST_IMAGINARY } EPSWhich;

 46: typedef enum { EPS_MGS_ORTH,  EPS_CGS_ORTH } EPSOrthogonalizationType;
 47: typedef enum { EPS_ORTH_REFINE_NEVER, EPS_ORTH_REFINE_IFNEEDED,
 48:                EPS_ORTH_REFINE_ALWAYS } EPSOrthogonalizationRefinementType;

 50: EXTERN PetscErrorCode EPSCreate(MPI_Comm,EPS *);
 51: EXTERN PetscErrorCode EPSDestroy(EPS);
 52: EXTERN PetscErrorCode EPSSetType(EPS,EPSType);
 53: EXTERN PetscErrorCode EPSGetType(EPS,EPSType*);
 54: EXTERN PetscErrorCode EPSSetProblemType(EPS,EPSProblemType);
 55: EXTERN PetscErrorCode EPSGetProblemType(EPS,EPSProblemType*);
 56: EXTERN PetscErrorCode EPSSetClass(EPS,EPSClass);
 57: EXTERN PetscErrorCode EPSGetClass(EPS,EPSClass*);
 58: EXTERN PetscErrorCode EPSSetOperators(EPS,Mat,Mat);
 59: EXTERN PetscErrorCode EPSSetFromOptions(EPS);
 60: EXTERN PetscErrorCode EPSSetUp(EPS);
 61: EXTERN PetscErrorCode EPSSolve(EPS);
 62: EXTERN PetscErrorCode EPSView(EPS,PetscViewer);

 64: EXTERN PetscErrorCode EPSInitializePackage(char *);

 66: EXTERN PetscErrorCode EPSSetST(EPS,ST);
 67: EXTERN PetscErrorCode EPSGetST(EPS,ST*);
 68: EXTERN PetscErrorCode EPSSetTolerances(EPS,PetscReal,int);
 69: EXTERN PetscErrorCode EPSGetTolerances(EPS,PetscReal*,int*);
 70: EXTERN PetscErrorCode EPSSetDimensions(EPS,int,int);
 71: EXTERN PetscErrorCode EPSGetDimensions(EPS,int*,int*);

 73: EXTERN PetscErrorCode EPSGetConverged(EPS,int*);
 74: EXTERN PetscErrorCode EPSGetEigenpair(EPS,int,PetscScalar*,PetscScalar*,Vec,Vec);
 75: EXTERN PetscErrorCode EPSGetValue(EPS,int,PetscScalar*,PetscScalar*);
 76: EXTERN PetscErrorCode EPSGetRightVector(EPS,int,Vec,Vec);
 77: EXTERN PetscErrorCode EPSGetLeftVector(EPS,int,Vec,Vec);
 78: EXTERN PetscErrorCode EPSComputeRelativeError(EPS,int,PetscReal*);
 79: EXTERN PetscErrorCode EPSComputeRelativeErrorLeft(EPS,int,PetscReal*);
 80: EXTERN PetscErrorCode EPSComputeResidualNorm(EPS,int,PetscReal*);
 81: EXTERN PetscErrorCode EPSComputeResidualNormLeft(EPS,int,PetscReal*);
 82: EXTERN PetscErrorCode EPSGetInvariantSubspace(EPS,Vec*);
 83: EXTERN PetscErrorCode EPSGetLeftInvariantSubspace(EPS,Vec*);
 84: EXTERN PetscErrorCode EPSGetErrorEstimate(EPS,int,PetscReal*);
 85: EXTERN PetscErrorCode EPSGetErrorEstimateLeft(EPS,int,PetscReal*);

 87: EXTERN PetscErrorCode EPSSetMonitor(EPS,int (*)(EPS,int,int,PetscScalar*,PetscScalar*,PetscReal*,int,void*),void*);
 88: EXTERN PetscErrorCode EPSClearMonitor(EPS);
 89: EXTERN PetscErrorCode EPSGetMonitorContext(EPS,void **);
 90: EXTERN PetscErrorCode EPSGetIterationNumber(EPS,int*);
 91: EXTERN PetscErrorCode EPSGetNumberLinearIterations(EPS eps,int*);

 93: EXTERN PetscErrorCode EPSSetInitialVector(EPS,Vec);
 94: EXTERN PetscErrorCode EPSGetInitialVector(EPS,Vec*);
 95: EXTERN PetscErrorCode EPSSetLeftInitialVector(EPS,Vec);
 96: EXTERN PetscErrorCode EPSGetLeftInitialVector(EPS,Vec*);
 97: EXTERN PetscErrorCode EPSSetWhichEigenpairs(EPS,EPSWhich);
 98: EXTERN PetscErrorCode EPSGetWhichEigenpairs(EPS,EPSWhich*);
 99: EXTERN PetscErrorCode EPSSetOrthogonalization(EPS,EPSOrthogonalizationType,EPSOrthogonalizationRefinementType,PetscReal);
100: EXTERN PetscErrorCode EPSGetOrthogonalization(EPS,EPSOrthogonalizationType*,EPSOrthogonalizationRefinementType*,PetscReal*);
101: EXTERN PetscErrorCode EPSIsGeneralized(EPS,PetscTruth*);
102: EXTERN PetscErrorCode EPSIsHermitian(EPS,PetscTruth*);

104: EXTERN PetscErrorCode EPSDefaultMonitor(EPS,int,int,PetscScalar*,PetscScalar*,PetscReal*,int,void*);
105: EXTERN PetscErrorCode EPSLGMonitor(EPS,int,int,PetscScalar*,PetscScalar*,PetscReal*,int,void*);

107: EXTERN PetscErrorCode EPSAttachDeflationSpace(EPS,int,Vec*,PetscTruth);
108: EXTERN PetscErrorCode EPSRemoveDeflationSpace(EPS);

110: EXTERN PetscErrorCode EPSSetOptionsPrefix(EPS,char*);
111: EXTERN PetscErrorCode EPSAppendOptionsPrefix(EPS,char*);
112: EXTERN PetscErrorCode EPSGetOptionsPrefix(EPS,const char*[]);

114: typedef enum {/* converged */
115:               EPS_CONVERGED_TOL                =  2,
116:               /* diverged */
117:               EPS_DIVERGED_ITS                 = -3,
118:               EPS_DIVERGED_BREAKDOWN           = -4,
119:               EPS_DIVERGED_NONSYMMETRIC        = -5,
120:               EPS_CONVERGED_ITERATING          =  0} EPSConvergedReason;

122: EXTERN PetscErrorCode EPSGetConvergedReason(EPS,EPSConvergedReason *);

124: EXTERN PetscErrorCode EPSSortEigenvalues(int,PetscScalar*,PetscScalar*,EPSWhich,int,int*);
125: EXTERN PetscErrorCode EPSDenseNHEP(int,PetscScalar*,PetscScalar*,PetscScalar*,PetscScalar*,PetscScalar*);
126: EXTERN PetscErrorCode EPSDenseGNHEP(int,PetscScalar*,PetscScalar*,PetscScalar*,PetscScalar*,PetscScalar*,PetscScalar*);
127: EXTERN PetscErrorCode EPSDenseHEP(int,PetscScalar*,PetscReal*,PetscScalar*);
128: EXTERN PetscErrorCode EPSDenseGHEP(int,PetscScalar*,PetscScalar*,PetscReal*,PetscScalar*);
129: EXTERN PetscErrorCode EPSDenseSchur(int,int,PetscScalar*,int,PetscScalar*,PetscScalar*,PetscScalar*);
130: EXTERN PetscErrorCode EPSSortDenseSchur(int,int,PetscScalar*,int,PetscScalar*,PetscScalar*,PetscScalar*);

132: EXTERN PetscErrorCode EPSOrthogonalize(EPS,int,Vec*,Vec,PetscScalar*,PetscReal*,PetscTruth*);
133: EXTERN PetscErrorCode EPSBiOrthogonalize(EPS,int,Vec*,Vec*,Vec,PetscScalar*,PetscReal*);
134: EXTERN PetscErrorCode EPSQRDecomposition(EPS,Vec*,int,int,PetscScalar*,int);
135: EXTERN PetscErrorCode EPSGetStartVector(EPS,int,Vec,PetscTruth*);
136: EXTERN PetscErrorCode EPSGetLeftStartVector(EPS,int,Vec);

138: /* --------- options specific to particular eigensolvers -------- */

140: typedef enum { EPSPOWER_SHIFT_CONSTANT, EPSPOWER_SHIFT_RAYLEIGH,
141:                EPSPOWER_SHIFT_WILKINSON } EPSPowerShiftType;

143: EXTERN PetscErrorCode EPSPowerSetShiftType(EPS,EPSPowerShiftType);
144: EXTERN PetscErrorCode EPSPowerGetShiftType(EPS,EPSPowerShiftType*);

146: EXTERN PetscErrorCode EPSArnoldiSetDelayed(EPS,PetscTruth);
147: EXTERN PetscErrorCode EPSArnoldiGetDelayed(EPS,PetscTruth*);

149: typedef enum { EPSLANCZOS_REORTHOG_LOCAL,
150:                EPSLANCZOS_REORTHOG_FULL,
151:                EPSLANCZOS_REORTHOG_SELECTIVE,
152:                EPSLANCZOS_REORTHOG_PERIODIC,
153:                EPSLANCZOS_REORTHOG_PARTIAL } EPSLanczosReorthogType;

155: EXTERN PetscErrorCode EPSLanczosSetReorthog(EPS,EPSLanczosReorthogType);
156: EXTERN PetscErrorCode EPSLanczosGetReorthog(EPS,EPSLanczosReorthogType*);

158: EXTERN PetscErrorCode EPSBlzpackSetBlockSize(EPS,int);
159: EXTERN PetscErrorCode EPSBlzpackSetInterval(EPS,PetscReal,PetscReal);
160: EXTERN PetscErrorCode EPSBlzpackSetNSteps(EPS,int);

163: #endif