# [petsc-users] When does DIVERGED_LINE_SEARCH Happen?

Dafang Wang dafang.wang at jhu.edu
Tue Mar 18 12:04:44 CDT 2014

```Hi Peter,

Running with "snes_linesearch_monitor" would give the following results
which I presented in my original email:

My simulation input consists of two scalar values (p1 and p2), each
of which acts as a constant pressure boundary condition.

Case 1, diverge:
p1= -10.190869   p2= -2.367555
NL step  0, |residual|_2 = 1.621402e-02
Line search: Using full step: fnorm 1.621401550027e-02 gnorm
7.022558235262e-05
NL step  1, |residual|_2 = 7.022558e-05
Line search: Using full step: fnorm 7.022558235262e-05 gnorm
1.636418730611e-06
NL step  2, |residual|_2 = 1.636419e-06
Nonlinear solve did not converge due to DIVERGED_LINE_SEARCH
iterations 2
------------------------------------------------------------------------
Case 2: converge:
p1= -10.190747 p2= -2.367558
NL step  0, |residual|_2 = 1.621380e-02
Line search: Using full step: fnorm 1.621379778276e-02 gnorm
6.976373804153e-05
NL step  1, |residual|_2 = 6.976374e-05
Line search: Using full step: fnorm 6.976373804153e-05 gnorm
4.000992847275e-07
NL step  2, |residual|_2 = 4.000993e-07
Line search: Using full step: fnorm 4.000992847275e-07 gnorm
1.621646014441e-08
NL step  3, |residual|_2 = 1.621646e-08
Nonlinear solve converged due to CONVERGED_SNORM_RELATIVE iterations 3

------------------------------------------------------------------------
Also, running with "-snes_stol=0" effectively suppressed the occurrence
of CONVERGED_SNORM_RELATIVE. Instead, most nonlinear solves took more
iterations and ended with CONVERGED_FNORM_RELATIVE at a smaller residual
error. In some cases (roughly 10 out of 5000), the nonlinear solves
failed with DIVERGED_LINE_SEARCH

Cheers,
Dafang

On 03/18/2014 10:15 AM, Peter Brune wrote:
> Is there more output from the line search?  What happens when you run
> with -snes_linesearch_monitor?  I remember there being a reason that I
> didn't put this update in the maintenance branch.  Let me figure out
> exactly why and get back to you.
>
>
> On Mon, Mar 17, 2014 at 5:37 PM, Dafang Wang <dafang.wang at jhu.edu
> <mailto:dafang.wang at jhu.edu>> wrote:
>
>     Hi Peter,
>
>     My version of PETSc (v3.4.3) does not contain the bug fix you
>     mentioned:
>     "+      ierr =
>     SNESLineSearchSetNorms(linesearch,xnorm,fnorm,ynorm);CHKERRQ(ierr);"
>     Would that be a problem?
>
>     I typically used the default value of -snes_stol, never setting it
>     to zero. I will let you know soon if you believe this is important.
>
>
> It would certainly be worth a try.
>
> - Peter
>
>     Cheers,
>     Dafang
>
>
>     On 03/17/2014 06:27 PM, Peter Brune wrote:
>>     This may be related to a bug we had reported before to petsc-maint:
>>
>>     https://bitbucket.org/petsc/petsc/commits/ced04f9d467b04aa83a18d3f8875c7f72c17217a
>>
>>       What version of PETSc are you running?  Also, what happens if
>>     you set -snes_stol to zero?
>>
>>     Thanks,
>>
>>     - Peter
>>
>>
>>     On Mon, Mar 17, 2014 at 5:19 PM, Dafang Wang <dafang.wang at jhu.edu
>>     <mailto:dafang.wang at jhu.edu>> wrote:
>>
>>         Hi Barry,
>>
>>         Thanks for your tips. I have read the webpage you mentioned
>>         many times before, but still I have been stuck on the
>>         line-search problem for weeks.
>>
>>         I cannot guarantee my Jacobian is correct but I believe an
>>         incorrect Jacobian is very unlikely. My Jacobian-calculation
>>         code has been under test for a year with both analytical and
>>         realistic models, and the results have been good until
>>         recently when I ran a very realistic physical model.
>>
>>         Also, I looked up the implementation of SNESSolve_NEWTONLS()
>>         in "ls.c". According to the algorithm, when the function
>>         "SNESLineSearchApply()" does not succeed, one may encounter
>>         two possible outcomes: CONVERGED_SNORM_RELATIVE (if the
>>         search step is too small) or otherwise, DIVERGED_LINE_SEARCH.
>>         Does this mean that both these two outcomes indicate that the
>>         line search fails?
>>
>>         I ask this question because my simulation encountered many
>>         CONVERGED_SNORM_RELATIVE. I treated them as if my nonlinear
>>         system converged, accepted the nonlinear solution, and then
>>         proceeded to the next time step of my simulation. Apparently,
>>         such practice has worked well in most cases, (even when I
>>         encountered suspicious DIVERGED_LINE_SEARCH behaviors).
>>         However, I wonder if there are any potential pitfalls in my
>>         practice such as missing a nonlinear solve divergence and
>>         taking a partial solution as the correct solution.
>>
>>         Thank you very much for your time and help.
>>
>>         Best,
>>         Dafang
>>
>>
>>         On 03/15/2014 11:15 AM, Barry Smith wrote:
>>
>>                 Failed line search are almost always due to an
>>             incorrect Jacobian. Please let us know if the suggestions
>>             at
>>             http://www.mcs.anl.gov/petsc/documentation/faq.html#newton don't
>>             help.
>>
>>                 Barry
>>
>>             On Mar 14, 2014, at 8:57 PM, Dafang Wang
>>             <dafang.wang at jhu.edu <mailto:dafang.wang at jhu.edu>> wrote:
>>
>>                 Hi,
>>
>>                 Does anyone know what the error code
>>                 DIVERGED_LINE_SEARCH means in the SNES nonlinear
>>                 solve? Or what scenario would lead to this error code?
>>
>>                 Running a solid mechanics simulation, I found that
>>                 the occurrence of DIVERGED_LINE_SEARCH was very
>>                 unpredictable and sensitive to the input values to my
>>                 nonlinear system, although my system should not be
>>                 that unstable. As shown by the two examples below, my
>>                 system diverged in one case and converged in the
>>                 other, although the input values in these two cases
>>                 differed by only 1e-4,
>>
>>                 Moreover, the Newton steps in the two cases were very
>>                 similar up to NL step 1. Since then, however, Case 1
>>                 encountered a line-search divergence whereas Case 2
>>                 converged successfully. This is my main confusion.
>>                 (Note that each residual vector contains 3e04 DOF, so
>>                 when their L2 norms differ within 1e-4, the two
>>                 systems should be very close.)
>>
>>                 My simulation input consists of two scalar values (p1
>>                 and p2), each of which acts as a constant pressure
>>                 boundary condition.
>>
>>                 Case 1, diverge:
>>                 p1= -10.190869   p2= -2.367555
>>                    NL step  0, |residual|_2 = 1.621402e-02
>>                        Line search: Using full step: fnorm
>>                 1.621401550027e-02 gnorm 7.022558235262e-05
>>                    NL step  1, |residual|_2 = 7.022558e-05
>>                        Line search: Using full step: fnorm
>>                 7.022558235262e-05 gnorm 1.636418730611e-06
>>                    NL step  2, |residual|_2 = 1.636419e-06
>>                 Nonlinear solve did not converge due to
>>                 DIVERGED_LINE_SEARCH iterations 2
>>                 Case 2: converge:
>>                 p1= -10.190747 p2= -2.367558
>>                    NL step  0, |residual|_2 = 1.621380e-02
>>                        Line search: Using full step: fnorm
>>                 1.621379778276e-02 gnorm 6.976373804153e-05
>>                    NL step  1, |residual|_2 = 6.976374e-05
>>                        Line search: Using full step: fnorm
>>                 6.976373804153e-05 gnorm 4.000992847275e-07
>>                    NL step  2, |residual|_2 = 4.000993e-07
>>                        Line search: Using full step: fnorm
>>                 4.000992847275e-07 gnorm 1.621646014441e-08
>>                    NL step  3, |residual|_2 = 1.621646e-08
>>                 Nonlinear solve converged due to
>>                 CONVERGED_SNORM_RELATIVE iterations 3
>>
>>                 Aside from the input values, the initial solution in
>>                 both cases may differ very slightly. (Each case is
>>                 one time step in a time-sequence simulation. The two
>>                 cases behaved nearly identically up to the last time
>>                 step before the step shown above, so their initial
>>                 solutions may differ by a cumulative error but such
>>                 error should be very small.)  Is it possible that
>>                 little difference in initial guess leads to different
>>                 local minimum regions where the line search in Case 1
>>                 failed?
>>
>>                 Any comments will be greatly appreciated.
>>
>>                 Thanks,
>>                 Dafang
>>                 --
>>                 Dafang Wang, Ph.D
>>                 Postdoctoral Fellow
>>                 Institute of Computational Medicine
>>                 Department of Biomedical Engineering
>>                 Johns Hopkins University
>>                 Hackerman Hall Room 218
>>                 Baltimore, MD, 21218
>>
>>
>>         --
>>         Dafang Wang, Ph.D
>>         Postdoctoral Fellow
>>         Institute of Computational Medicine
>>         Department of Biomedical Engineering
>>         Johns Hopkins University
>>         Hackerman Hall Room 218
>>         Baltimore, MD, 21218
>>
>>
>
>     --
>     Dafang Wang, Ph.D
>     Postdoctoral Fellow
>     Institute of Computational Medicine
>     Department of Biomedical Engineering
>     Johns Hopkins University
>     Hackerman Hall Room 218
>     Baltimore, MD, 21218
>
>

--
Dafang Wang, Ph.D
Postdoctoral Fellow
Institute of Computational Medicine
Department of Biomedical Engineering
Johns Hopkins University
Hackerman Hall Room 218
Baltimore, MD, 21218
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20140318/e70ddac1/attachment.html>
```