| Line 41... |
Line 41... |
|
|
Level: beginner
|
Level: beginner
|
@*/
|
@*/
|
PetscErrorCode EPSSetFromOptions(EPS eps)
|
PetscErrorCode EPSSetFromOptions(EPS eps)
|
{
|
{
|
PetscErrorCode ierr;
|
PetscErrorCode ierr;
|
char type[256],monfilename[PETSC_MAX_PATH_LEN];
|
char type[256],monfilename[PETSC_MAX_PATH_LEN];
|
PetscBool flg,val;
|
PetscBool flg,val;
|
PetscReal r,nrma,nrmb,array[2];
|
PetscReal r,nrma,nrmb,array[2];
|
PetscScalar s;
|
PetscScalar s;
|
PetscInt i,j,k;
|
PetscInt i,j,k;
|
const char *bal_list[4] = {"none","oneside","twoside","user"};
|
const char *bal_list[4] = {"none","oneside","twoside","user"};
|
PetscViewerASCIIMonitor monviewer;
|
PetscViewer monviewer;
|
SlepcConvMonitor ctx;
|
SlepcConvMonitor ctx;
|
|
|
PetscFunctionBegin;
|
PetscFunctionBegin;
|
PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
|
PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
|
if (!EPSRegisterAllCalled) { ierr = EPSRegisterAll(PETSC_NULL);CHKERRQ(ierr); }
|
if (!EPSRegisterAllCalled) { ierr = EPSRegisterAll(PETSC_NULL);CHKERRQ(ierr); }
|
ierr = PetscOptionsBegin(((PetscObject)eps)->comm,((PetscObject)eps)->prefix,"Eigenproblem Solver (EPS) Options","EPS");CHKERRQ(ierr);
|
ierr = PetscOptionsBegin(((PetscObject)eps)->comm,((PetscObject)eps)->prefix,"Eigenproblem Solver (EPS) Options","EPS");CHKERRQ(ierr);
|
| Line 133... |
Line 133... |
/*
|
/*
|
Prints approximate eigenvalues and error estimates at each iteration
|
Prints approximate eigenvalues and error estimates at each iteration
|
*/
|
*/
|
ierr = PetscOptionsString("-eps_monitor","Monitor first unconverged approximate eigenvalue and error estimate","EPSMonitorSet","stdout",monfilename,PETSC_MAX_PATH_LEN,&flg);CHKERRQ(ierr);
|
ierr = PetscOptionsString("-eps_monitor","Monitor first unconverged approximate eigenvalue and error estimate","EPSMonitorSet","stdout",monfilename,PETSC_MAX_PATH_LEN,&flg);CHKERRQ(ierr);
|
if (flg) {
|
if (flg) {
|
ierr = PetscViewerASCIIMonitorCreate(((PetscObject)eps)->comm,monfilename,((PetscObject)eps)->tablevel,&monviewer);CHKERRQ(ierr);
|
ierr = PetscViewerASCIIOpen(((PetscObject)eps)->comm,monfilename,&monviewer);CHKERRQ(ierr);
|
ierr = EPSMonitorSet(eps,EPSMonitorFirst,monviewer,(PetscErrorCode (*)(void**))PetscViewerASCIIMonitorDestroy);CHKERRQ(ierr);
|
ierr = EPSMonitorSet(eps,EPSMonitorFirst,monviewer,(PetscErrorCode (*)(void**))PetscViewerDestroy);CHKERRQ(ierr);
|
}
|
}
|
ierr = PetscOptionsString("-eps_monitor_conv","Monitor approximate eigenvalues and error estimates as they converge","EPSMonitorSet","stdout",monfilename,PETSC_MAX_PATH_LEN,&flg);CHKERRQ(ierr);
|
ierr = PetscOptionsString("-eps_monitor_conv","Monitor approximate eigenvalues and error estimates as they converge","EPSMonitorSet","stdout",monfilename,PETSC_MAX_PATH_LEN,&flg);CHKERRQ(ierr);
|
if (flg) {
|
if (flg) {
|
ierr = PetscNew(struct _n_SlepcConvMonitor,&ctx);CHKERRQ(ierr);
|
ierr = PetscNew(struct _n_SlepcConvMonitor,&ctx);CHKERRQ(ierr);
|
ierr = PetscViewerASCIIMonitorCreate(((PetscObject)eps)->comm,monfilename,((PetscObject)eps)->tablevel,&ctx->viewer);CHKERRQ(ierr);
|
ierr = PetscViewerASCIIOpen(((PetscObject)eps)->comm,monfilename,&ctx->viewer);CHKERRQ(ierr);
|
ierr = EPSMonitorSet(eps,EPSMonitorConverged,ctx,(PetscErrorCode (*)(void**))SlepcConvMonitorDestroy);CHKERRQ(ierr);
|
ierr = EPSMonitorSet(eps,EPSMonitorConverged,ctx,(PetscErrorCode (*)(void**))SlepcConvMonitorDestroy);CHKERRQ(ierr);
|
}
|
}
|
ierr = PetscOptionsString("-eps_monitor_all","Monitor approximate eigenvalues and error estimates","EPSMonitorSet","stdout",monfilename,PETSC_MAX_PATH_LEN,&flg);CHKERRQ(ierr);
|
ierr = PetscOptionsString("-eps_monitor_all","Monitor approximate eigenvalues and error estimates","EPSMonitorSet","stdout",monfilename,PETSC_MAX_PATH_LEN,&flg);CHKERRQ(ierr);
|
if (flg) {
|
if (flg) {
|
ierr = PetscViewerASCIIMonitorCreate(((PetscObject)eps)->comm,monfilename,((PetscObject)eps)->tablevel,&monviewer);CHKERRQ(ierr);
|
ierr = PetscViewerASCIIOpen(((PetscObject)eps)->comm,monfilename,&monviewer);CHKERRQ(ierr);
|
ierr = EPSMonitorSet(eps,EPSMonitorAll,monviewer,(PetscErrorCode (*)(void**))PetscViewerASCIIMonitorDestroy);CHKERRQ(ierr);
|
ierr = EPSMonitorSet(eps,EPSMonitorAll,monviewer,(PetscErrorCode (*)(void**))PetscViewerDestroy);CHKERRQ(ierr);
|
ierr = EPSSetTrackAll(eps,PETSC_TRUE);CHKERRQ(ierr);
|
ierr = EPSSetTrackAll(eps,PETSC_TRUE);CHKERRQ(ierr);
|
}
|
}
|
flg = PETSC_FALSE;
|
flg = PETSC_FALSE;
|
ierr = PetscOptionsBool("-eps_monitor_draw","Monitor first unconverged approximate eigenvalue and error estimate graphically","EPSMonitorSet",flg,&flg,PETSC_NULL);CHKERRQ(ierr);
|
ierr = PetscOptionsBool("-eps_monitor_draw","Monitor first unconverged approximate eigenvalue and error estimate graphically","EPSMonitorSet",flg,&flg,PETSC_NULL);CHKERRQ(ierr);
|
if (flg) {
|
if (flg) {
|