[PETSC #19425] steptol in SNES LS routines
bsmith at mcs.anl.gov
Sat May 9 13:09:08 CDT 2009
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?
3) otherwise it fits the function to the quadratic or cubic function
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
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.
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?
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).
On May 8, 2009, at 6:34 PM, Eric Meier wrote:
> In the line search routines within SNES, I think there is some
> confusion about the option -snes_stol <stol>.
> On this page
> stol is defined one way. But on this page
> 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
> - 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.
More information about the petsc-dev