[petsc-dev] TAO convergence tests are undecipherable

Munson, Todd S. tmunson at mcs.anl.gov
Wed Sep 9 10:02:11 CDT 2015


I do not see a need to keep them around.  The function tolerances are
usually something like |f(x_k) - f_(x_{k-1})| <= fatol and then you 
use |f(x_0)| in the denominator for the relative tolerance.  There 
are pretty useless tests though and give many false positives.

Todd.

> On Sep 9, 2015, at 9:26 AM, Jason Sarich <sarich at mcs.anl.gov> wrote:
> 
> Todd, can you come up with a reason why we might need to keep these fatol, frtol tests around? I would prefer to take them out.
> 
> Jason
> 
> On Tue, Sep 8, 2015 at 9:54 PM, Smith, Barry F. <bsmith at mcs.anl.gov> wrote:
> 
>   Jason,
> 
>    Perhaps it is just documentation.
> 
> /*@
>   TaoSetTolerances - Sets parameters used in TAO convergence tests
> 
>   Logically collective on Tao
> 
>   Input Parameters:
> + tao - the Tao context
> . fatol - absolute convergence tolerance
> . frtol - relative convergence tolerance
> . gatol - stop if norm of gradient is less than this
> . grtol - stop if relative norm of gradient is less than this
> - gttol - stop if norm of gradient is reduced by this factor
> 
>   Options Database Keys:
> + -tao_fatol <fatol> - Sets fatol
> . -tao_frtol <frtol> - Sets frtol
> . -tao_gatol <gatol> - Sets gatol
> . -tao_grtol <grtol> - Sets grtol
> - -tao_gttol <gttol> - Sets gttol
> 
>   Stopping Criteria:
> $ f(X) - f(X*) (estimated)            <= fatol
> $ |f(X) - f(X*)| (estimated) / |f(X)| <= frtol
> $ ||g(X)||                            <= gatol
> $ ||g(X)|| / |f(X)|                   <= grtol
> $ ||g(X)|| / ||g(X0)||                <= gttol
> 
> How is f(x) - f(X*) (estimated) and how come the second definition has absolute values but the first does not?
> 
> From below it looks like f(x) - f(X*)  is estimated as gnorm*gnorm?
> 
>   } else if (gnorm2 <= fatol && cnorm <=catol) {
>     ierr = PetscInfo2(tao,"Converged due to estimated f(X) - f(X*) = %g < %g\n",(double)gnorm2,(double)fatol);CHKERRQ(ierr);
>     reason = TAO_CONVERGED_FATOL;
>   } else if (f != 0 && gnorm2 / PetscAbsReal(f)<= frtol && cnorm/PetscMax(cnorm0,1.0) <= crtol) {
>     ierr = PetscInfo2(tao,"Converged due to estimated |f(X)-f(X*)|/f(X) = %g < %g\n",(double)(gnorm2/PetscAbsReal(f)),(double)frtol);CHKERRQ(ierr);
>     reason = TAO_CONVERGED_FRTOL;
> 
> It seems the next test is the same as the first I list above exact gnorm is not squared? Why is it worth having this duplicate test?
> 
>   } else if (gnorm<= gatol && cnorm <=catol) {
>     ierr = PetscInfo2(tao,"Converged due to residual norm ||g(X)||=%g < %g\n",(double)gnorm,(double)gatol);CHKERRQ(ierr);
>     reason = TAO_CONVERGED_GATOL;
> 
> At a minimum the manual page should document what f(X) - f(X*) (estimated)     means.
> 
>   Barry
> 
>   } else if ( f!=0 && PetscAbsReal(gnorm/f) <= grtol && cnorm <= crtol) {
>     ierr = PetscInfo2(tao,"Converged due to residual ||g(X)||/|f(X)| =%g < %g\n",(double)(gnorm/f),(double)grtol);CHKERRQ(ierr);
> 
> 




More information about the petsc-dev mailing list