Subversion Repositories slepc-dev

Compare Revisions

Ignore whitespace Rev 2030 → Rev 2031

/trunk/src/eps/interface/basic.c
243,6 → 243,9
if (eps->leftvecs) {
ierr = PetscViewerASCIIPrintf(viewer," computing left eigenvectors also\n");CHKERRQ(ierr);
}
if (eps->trueres) {
ierr = PetscViewerASCIIPrintf(viewer," computing true residuals explicitly\n");CHKERRQ(ierr);
}
ierr = PetscViewerASCIIPrintf(viewer," number of eigenvalues (nev): %d\n",eps->nev);CHKERRQ(ierr);
ierr = PetscViewerASCIIPrintf(viewer," number of column vectors (ncv): %d\n",eps->ncv);CHKERRQ(ierr);
ierr = PetscViewerASCIIPrintf(viewer," maximum dimension of projected problem (mpd): %d\n",eps->mpd);CHKERRQ(ierr);
325,6 → 328,7
eps->which_func = PETSC_NULL;
eps->which_ctx = PETSC_NULL;
eps->leftvecs = PETSC_FALSE;
eps->trueres = PETSC_FALSE;
eps->target = 0.0;
eps->evecsavailable = PETSC_FALSE;
eps->problem_type = (EPSProblemType)0;
/trunk/src/eps/interface/opts.c
184,6 → 184,10
if (flg) {
ierr = EPSSetLeftVectorsWanted(eps,val);CHKERRQ(ierr);
}
ierr = PetscOptionsTruth("-eps_true_residual","Compute true residuals explicitly","EPSSetTrueResidual",eps->trueres,&val,&flg);CHKERRQ(ierr);
if (flg) {
ierr = EPSSetTrueResidual(eps,val);CHKERRQ(ierr);
}
 
nrma = nrmb = PETSC_IGNORE;
ierr = PetscOptionsReal("-eps_norm_a","Norm of matrix A","EPSSetMatrixNorms",eps->nrma,&nrma,PETSC_NULL);CHKERRQ(ierr);
1036,6 → 1040,71
}
 
#undef __FUNCT__
#define __FUNCT__ "EPSSetTrueResidual"
/*@
EPSSetTrueResidual - Specifies if the solver must compute de true residual
explicitly or not.
 
Collective on EPS
 
Input Parameters:
+ eps - the eigensolver context
- trueres - whether true residuals are required or not
 
Options Database Keys:
. -eps_true_residual <boolean> - Sets/resets the boolean flag 'trueres'
 
Notes:
If the user sets trueres=PETSC_TRUE then the solver explicitly computes
the true residual for each eigenpair approximation, and uses it for
convergence testing. Computing the residual is usually an expensive
operation. Some solvers (e.g., Krylov solvers) can avoid this computation
by using a cheap estimate of the residual norm, but this may sometimes
give inaccurate results (especially if a spectral transform is being
used). On the contrary, preconditioned eigensolvers (e.g., Davidson solvers)
do rely on computing the true residual, so this option is irrelevant for them.
 
Level: intermediate
 
.seealso: EPSGetTrueResidual()
@*/
PetscErrorCode EPSSetTrueResidual(EPS eps,PetscTruth trueres)
{
PetscFunctionBegin;
PetscValidHeaderSpecific(eps,EPS_COOKIE,1);
eps->trueres = trueres;
PetscFunctionReturn(0);
}
 
#undef __FUNCT__
#define __FUNCT__ "EPSGetTrueResidual"
/*@C
EPSGetTrueResidual - Returns the flag indicating whether true
residuals must be computed explicitly or not.
 
Not Collective
 
Input Parameter:
. eps - the eigensolver context
 
Output Parameter:
. trueres - the returned flag
 
Level: intermediate
 
.seealso: EPSSetTrueResidual()
@*/
PetscErrorCode EPSGetTrueResidual(EPS eps,PetscTruth *trueres)
{
PetscFunctionBegin;
PetscValidHeaderSpecific(eps,EPS_COOKIE,1);
PetscValidPointer(trueres,2);
*trueres = eps->trueres;
PetscFunctionReturn(0);
}
 
 
#undef __FUNCT__
#define __FUNCT__ "EPSSetOptionsPrefix"
/*@C
EPSSetOptionsPrefix - Sets the prefix used for searching for all