| Line 178... |
Line 178... |
. nconv - number of converged eigenpairs so far
|
. nconv - number of converged eigenpairs so far
|
. eigr - real part of the eigenvalues
|
. eigr - real part of the eigenvalues
|
. eigi - imaginary part of the eigenvalues
|
. eigi - imaginary part of the eigenvalues
|
. errest - error estimates
|
. errest - error estimates
|
. nest - number of error estimates to display
|
. nest - number of error estimates to display
|
- dummy - unused monitor context
|
- monctx - monitor context (contains viewer, can be PETSC_NULL)
|
|
|
Level: intermediate
|
Level: intermediate
|
|
|
.seealso: EPSMonitorSet(), EPSMonitorFirst(), EPSMonitorConverged()
|
.seealso: EPSMonitorSet(), EPSMonitorFirst(), EPSMonitorConverged()
|
@*/
|
@*/
|
PetscErrorCode EPSMonitorAll(EPS eps,PetscInt its,PetscInt nconv,PetscScalar *eigr,PetscScalar *eigi,PetscReal *errest,PetscInt nest,void *dummy)
|
PetscErrorCode EPSMonitorAll(EPS eps,PetscInt its,PetscInt nconv,PetscScalar *eigr,PetscScalar *eigi,PetscReal *errest,PetscInt nest,void *monctx)
|
{
|
{
|
PetscErrorCode ierr;
|
PetscErrorCode ierr;
|
PetscInt i;
|
PetscInt i;
|
PetscScalar er,ei;
|
PetscScalar er,ei;
|
PetscViewer viewer = dummy? (PetscViewer)dummy: PETSC_VIEWER_STDOUT_(((PetscObject)eps)->comm);
|
PetscViewer viewer = monctx? (PetscViewer)monctx: PETSC_VIEWER_STDOUT_(((PetscObject)eps)->comm);
|
|
|
PetscFunctionBegin;
|
PetscFunctionBegin;
|
if (its) {
|
if (its) {
|
ierr = PetscViewerASCIIAddTab(viewer,((PetscObject)eps)->tablevel);CHKERRQ(ierr);
|
ierr = PetscViewerASCIIAddTab(viewer,((PetscObject)eps)->tablevel);CHKERRQ(ierr);
|
ierr = PetscViewerASCIIPrintf(viewer,"%3D EPS nconv=%D Values (Errors)",its,nconv);CHKERRQ(ierr);
|
ierr = PetscViewerASCIIPrintf(viewer,"%3D EPS nconv=%D Values (Errors)",its,nconv);CHKERRQ(ierr);
|
| Line 228... |
Line 228... |
. nconv - number of converged eigenpairs so far
|
. nconv - number of converged eigenpairs so far
|
. eigr - real part of the eigenvalues
|
. eigr - real part of the eigenvalues
|
. eigi - imaginary part of the eigenvalues
|
. eigi - imaginary part of the eigenvalues
|
. errest - error estimates
|
. errest - error estimates
|
. nest - number of error estimates to display
|
. nest - number of error estimates to display
|
- dummy - unused monitor context
|
- monctx - monitor context (contains viewer, can be PETSC_NULL)
|
|
|
Level: intermediate
|
Level: intermediate
|
|
|
.seealso: EPSMonitorSet(), EPSMonitorAll(), EPSMonitorConverged()
|
.seealso: EPSMonitorSet(), EPSMonitorAll(), EPSMonitorConverged()
|
@*/
|
@*/
|
PetscErrorCode EPSMonitorFirst(EPS eps,PetscInt its,PetscInt nconv,PetscScalar *eigr,PetscScalar *eigi,PetscReal *errest,PetscInt nest,void *dummy)
|
PetscErrorCode EPSMonitorFirst(EPS eps,PetscInt its,PetscInt nconv,PetscScalar *eigr,PetscScalar *eigi,PetscReal *errest,PetscInt nest,void *monctx)
|
{
|
{
|
PetscErrorCode ierr;
|
PetscErrorCode ierr;
|
PetscScalar er,ei;
|
PetscScalar er,ei;
|
PetscViewer viewer = dummy? (PetscViewer)dummy: PETSC_VIEWER_STDOUT_(((PetscObject)eps)->comm);
|
PetscViewer viewer = monctx? (PetscViewer)monctx: PETSC_VIEWER_STDOUT_(((PetscObject)eps)->comm);
|
|
|
PetscFunctionBegin;
|
PetscFunctionBegin;
|
if (its && nconv<nest) {
|
if (its && nconv<nest) {
|
ierr = PetscViewerASCIIAddTab(viewer,((PetscObject)eps)->tablevel);CHKERRQ(ierr);
|
ierr = PetscViewerASCIIAddTab(viewer,((PetscObject)eps)->tablevel);CHKERRQ(ierr);
|
ierr = PetscViewerASCIIPrintf(viewer,"%3D EPS nconv=%D first unconverged value (error)",its,nconv);CHKERRQ(ierr);
|
ierr = PetscViewerASCIIPrintf(viewer,"%3D EPS nconv=%D first unconverged value (error)",its,nconv);CHKERRQ(ierr);
|
| Line 274... |
Line 274... |
. nconv - number of converged eigenpairs so far
|
. nconv - number of converged eigenpairs so far
|
. eigr - real part of the eigenvalues
|
. eigr - real part of the eigenvalues
|
. eigi - imaginary part of the eigenvalues
|
. eigi - imaginary part of the eigenvalues
|
. errest - error estimates
|
. errest - error estimates
|
. nest - number of error estimates to display
|
. nest - number of error estimates to display
|
- dummy - unused monitor context
|
- monctx - monitor context
|
|
|
|
Note:
|
|
The monitor context must contain a struct with a PetscViewer and a
|
|
PetscInt. In Fortran, pass a PETSC_NULL_OBJECT.
|
|
|
Level: intermediate
|
Level: intermediate
|
|
|
.seealso: EPSMonitorSet(), EPSMonitorFirst(), EPSMonitorAll()
|
.seealso: EPSMonitorSet(), EPSMonitorFirst(), EPSMonitorAll()
|
@*/
|
@*/
|
PetscErrorCode EPSMonitorConverged(EPS eps,PetscInt its,PetscInt nconv,PetscScalar *eigr,PetscScalar *eigi,PetscReal *errest,PetscInt nest,void *dummy)
|
PetscErrorCode EPSMonitorConverged(EPS eps,PetscInt its,PetscInt nconv,PetscScalar *eigr,PetscScalar *eigi,PetscReal *errest,PetscInt nest,void *monctx)
|
{
|
{
|
PetscErrorCode ierr;
|
PetscErrorCode ierr;
|
PetscInt i;
|
PetscInt i;
|
PetscScalar er,ei;
|
PetscScalar er,ei;
|
SlepcConvMonitor ctx = (SlepcConvMonitor)dummy;
|
PetscViewer viewer;
|
|
SlepcConvMonitor ctx = (SlepcConvMonitor)monctx;
|
|
|
PetscFunctionBegin;
|
PetscFunctionBegin;
|
|
if (!monctx) SETERRQ(((PetscObject)eps)->comm,PETSC_ERR_ARG_WRONG,"Must provide a context for EPSMonitorConverged");
|
if (!its) {
|
if (!its) {
|
ctx->oldnconv = 0;
|
ctx->oldnconv = 0;
|
} else {
|
} else {
|
|
viewer = ctx->viewer? ctx->viewer: PETSC_VIEWER_STDOUT_(((PetscObject)eps)->comm);
|
for (i=ctx->oldnconv;i<nconv;i++) {
|
for (i=ctx->oldnconv;i<nconv;i++) {
|
ierr = PetscViewerASCIIAddTab(ctx->viewer,((PetscObject)eps)->tablevel);CHKERRQ(ierr);
|
ierr = PetscViewerASCIIAddTab(viewer,((PetscObject)eps)->tablevel);CHKERRQ(ierr);
|
ierr = PetscViewerASCIIPrintf(ctx->viewer,"%3D EPS converged value (error) #%D",its,i);CHKERRQ(ierr);
|
ierr = PetscViewerASCIIPrintf(viewer,"%3D EPS converged value (error) #%D",its,i);CHKERRQ(ierr);
|
er = eigr[i]; ei = eigi[i];
|
er = eigr[i]; ei = eigi[i];
|
ierr = STBackTransform(eps->OP,1,&er,&ei);CHKERRQ(ierr);
|
ierr = STBackTransform(eps->OP,1,&er,&ei);CHKERRQ(ierr);
|
#if defined(PETSC_USE_COMPLEX)
|
#if defined(PETSC_USE_COMPLEX)
|
ierr = PetscViewerASCIIPrintf(ctx->viewer," %G%+Gi",PetscRealPart(er),PetscImaginaryPart(er));CHKERRQ(ierr);
|
ierr = PetscViewerASCIIPrintf(viewer," %G%+Gi",PetscRealPart(er),PetscImaginaryPart(er));CHKERRQ(ierr);
|
#else
|
#else
|
ierr = PetscViewerASCIIPrintf(ctx->viewer," %G",er);CHKERRQ(ierr);
|
ierr = PetscViewerASCIIPrintf(viewer," %G",er);CHKERRQ(ierr);
|
if (ei!=0.0) { ierr = PetscViewerASCIIPrintf(ctx->viewer,"%+Gi",ei);CHKERRQ(ierr); }
|
if (ei!=0.0) { ierr = PetscViewerASCIIPrintf(viewer,"%+Gi",ei);CHKERRQ(ierr); }
|
#endif
|
#endif
|
ierr = PetscViewerASCIIPrintf(ctx->viewer," (%10.8e)\n",(double)errest[i]);CHKERRQ(ierr);
|
ierr = PetscViewerASCIIPrintf(viewer," (%10.8e)\n",(double)errest[i]);CHKERRQ(ierr);
|
ierr = PetscViewerASCIISubtractTab(ctx->viewer,((PetscObject)eps)->tablevel);CHKERRQ(ierr);
|
ierr = PetscViewerASCIISubtractTab(viewer,((PetscObject)eps)->tablevel);CHKERRQ(ierr);
|
}
|
}
|
ctx->oldnconv = nconv;
|
ctx->oldnconv = nconv;
|
}
|
}
|
PetscFunctionReturn(0);
|
PetscFunctionReturn(0);
|
}
|
}
|