[PETSC #19425] steptol in SNES LS routines

Matthew Knepley petsc-maint at mcs.anl.gov
Sat May 9 13:28:16 CDT 2009

On Sat, May 9, 2009 at 1:09 PM, Barry Smith <bsmith at mcs.anl.gov> wrote:

>   After looking at the code I see why it ended up being so complicated. It
> needs some thought.
> The way the line search works is
> 1) if the full step satisfies the reduction criteria it returns
> 2) if the full step is smaller (measured by the 2 norm) then stol it
> returns (in other words if the full step satisfies the "small step" SNES
> convergence criteria)
>     this catches the case when the full step is zero length (but also may
> return with a bigger function norm than last time) This also returns with
> the flag saying linesearch successful,
>     should it really say successful?

My understanding was that this catches stagnation, so that a time step could
be decreased or continuation parameter, etc. Thus I agree with Barry that
this should say unsuccessful, like a divergence tolerance.

> 3) otherwise it fits the function to the quadratic or cubic function until
>    a) reduction criteria satisfied or
>    b) step length is too small as measured by this strange max_i p_i/x_i
> "norm" using again stol this returns with a flag saying line search
> unsuccessful

       c)  or it has tried too many times (I think its 10)

> Now my first inclination was to change 3b to use a -snes_ls_minstep
> <minstep> value instead of stol.  Thus one could control the minimum step
> size in the
> line search without affecting the convergence tolerances. This may be a
> correct fix.

I like this.

> But what about 2a? Do I continue to use the stol here? Do I use the new
> <minstep> value; I don't think so because that is used in 3a with a very
> different norm so minstep has two meanings. Do I introduce a third
> tolerance; yuck. Do I just check if it is exactly zero only?

You do not need to check for zero step since the sufficient reduction
criterion will rule this out. I think this also ought to rule out
checking stol. If sufficient reduction is achieved, I could care less about
how small the step is.

> My inclination is to have a check for exactly zero only and then let 3b
> determine if it should return immediately (because the line search length is
> too small). If we totally remove 2 (and the step is zero) then 3b will
> return immediately BUT it will return with a flag saying linesearch failed
> (while 2 currently says success).

I think failure is fine.


>  Thoughts anyone?
>   Barry
> On May 8, 2009, at 6:34 PM, Eric Meier wrote:
>  Hi,
>> In the line search routines within SNES, I think there is some confusion
>> about the option -snes_stol <stol>.
>> On this page
>> http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-current/docs/manualpages/SNES/SNESSetTolerances.html
>> stol is defined one way.  But on this page
>> http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-current/docs/manualpages/SNES/SNESLineSearchQuadratic.html
>> it is defined another way.
>> When I look in the PETSc code (ls.c), it seems to me that PETSc uses the
>> option set with -snes_stol as the minimum step size in the line search
>> routines (quadratic and cubic).  But, it seems to use that same tolerance in
>> the sense that
>> stol
>> - convergence tolerance in terms of the norm of the change in the solution
>> between steps
>> Therefore, I don't see how to control the minimum step size in the line
>> search routines without affecting the convergence tolerances.
>> Eric

What most experimenters take for granted before they begin their experiments
is infinitely more interesting than any results to which their experiments
-- Norbert Wiener
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-dev/attachments/20090509/bd0ee26b/attachment.html>

More information about the petsc-dev mailing list