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.

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 <[email protected] <mailto:[email protected]>> 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 <[email protected]
        <mailto:[email protected]>> 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

Reply via email to