[petsc-users] Cannot iterate well when using Newton iteration of SNES
Matthew Knepley
knepley at gmail.com
Thu Nov 21 09:21:29 CST 2024
On Thu, Nov 21, 2024 at 8:57 AM David Jiawei LUO LIANG <
12431140 at mail.sustech.edu.cn> wrote:
> I am using the Newton iteration to solve a nonlinear 1D heat equation
> problem by using FEM.
>
> I attached my source code named "SNES_heat.cpp"
>
> when I run the code
>
> 0 SNES Function norm 1.206289245288e+01
>
> 1 SNES Function norm 7.128802192789e+00
>
> 2 SNES Function norm 6.608812909525e+00
>
> you can find that it only iterate 3 steps, and then do all the function
> evaluation and finally just stop the program.
>
> I think it is not reasonble. I check my code, it is correct if I set it as
> a linear problem. it means my Jacobian and Residual function is correct.
>
> But when I set it as a nonlinear, the residual seems reduces as not
> expected.
>
> I doubt that whether my understanding of the newton iteration is different
> from SNES's newton iteration process.
>
Here is what happens with the code as it is:
master *:~/Downloads/tmp/Liang$ ./SNES_heat -snes_monitor
-ksp_converged_reason -snes_converged_reason -pc_type lu -snes_view
-snes_linesearch_monitor
pp 1
nElem 10
nqp 2
n_np 11
n_en 2
n_eq 10
qp:
0.57735 -0.57735
wq:
1 1
IEN:
1 2 3 4 5 6 7 8 9 10 2 3 4 5 6 7 8 9 10 11
x_coor:
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
ID:
1 2 3 4 5 6 7 8 9 10 0
0 SNES Function norm 1.206289245288e+01
Linear solve converged due to CONVERGED_RTOL iterations 1
Line search: Using full step: fnorm 1.206289245288e+01 gnorm
7.128802192789e+00
1 SNES Function norm 7.128802192789e+00
Linear solve converged due to CONVERGED_RTOL iterations 1
Line search: Using full step: fnorm 7.128802192789e+00 gnorm
6.608812909525e+00
2 SNES Function norm 6.608812909525e+00
Linear solve converged due to CONVERGED_RTOL iterations 1
Line search: gnorm after quadratic fit 1.265375106867e+01
Line search: Cubic step no good, shrinking lambda, current gnorm
1.328962011911e+01 lambda=1.7500506382162818e-02
Line search: Cubic step no good, shrinking lambda, current gnorm
1.275802797864e+01 lambda=1.7500506382162819e-03
Line search: Cubic step no good, shrinking lambda, current gnorm
1.327920917220e+01 lambda=1.7500506382162821e-04
Line search: Cubic step no good, shrinking lambda, current gnorm
1.275906891232e+01 lambda=1.7500506382162820e-05
Line search: Cubic step no good, shrinking lambda, current gnorm
1.327910508109e+01 lambda=1.7500506382162821e-06
Line search: Cubic step no good, shrinking lambda, current gnorm
1.275907932147e+01 lambda=1.7500506382162822e-07
Line search: Cubic step no good, shrinking lambda, current gnorm
1.327910404018e+01 lambda=1.7500506382162823e-08
Line search: Cubic step no good, shrinking lambda, current gnorm
1.275907942556e+01 lambda=1.7500506382162823e-09
Line search: Cubic step no good, shrinking lambda, current gnorm
1.327910402977e+01 lambda=1.7500506382162824e-10
Line search: Cubic step no good, shrinking lambda, current gnorm
1.275907942660e+01 lambda=1.7500506382162825e-11
Line search: Cubic step no good, shrinking lambda, current gnorm
1.327910402966e+01 lambda=1.7500506382162826e-12
Line search: Cubic step no good, shrinking lambda, current gnorm
1.275907942661e+01 lambda=1.7500506382162828e-13
Line search: unable to find good step length! After 12 tries
Line search: fnorm=6.6088129095253478e+00,
gnorm=1.2759079426614502e+01, ynorm=5.3714153713436097e-01,
minlambda=9.9999999999999998e-13, lambda=1.7500506382162828e-13, initial
slope=-4.3676408073108860e+01
Nonlinear solve did not converge due to DIVERGED_LINE_SEARCH iterations 2
Usually, we suspect that the Jacobian is incorrect in this case. Thus we
can have it formed automatically,
master *:~/Downloads/tmp/Liang$ ./SNES_heat -snes_monitor
-ksp_converged_reason -snes_converged_reason -snes_fd -pc_type lu
-snes_view -snes_linesearch_monitor
pp 1
nElem 10
nqp 2
n_np 11
n_en 2
n_eq 10
qp:
0.57735 -0.57735
wq:
1 1
IEN:
1 2 3 4 5 6 7 8 9 10 2 3 4 5 6 7 8 9 10 11
x_coor:
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
ID:
1 2 3 4 5 6 7 8 9 10 0
0 SNES Function norm 1.206289245288e+01
Linear solve converged due to CONVERGED_RTOL iterations 1
Line search: Scaling step by 1.837216392007e-47 old ynorm
5.443016970405e+54
Line search: gnorm after quadratic fit 3.704240795372e+16
Line search: Cubic step no good, shrinking lambda, current gnorm
3.704614960636e+16 lambda=1.0000000000000002e-02
Line search: Cubic step no good, shrinking lambda, current gnorm
3.704611219026e+16 lambda=1.0000000000000002e-03
Line search: Cubic step no good, shrinking lambda, current gnorm
3.704611256438e+16 lambda=1.0000000000000003e-04
Line search: Cubic step no good, shrinking lambda, current gnorm
3.704611256064e+16 lambda=1.0000000000000004e-05
Line search: Cubic step no good, shrinking lambda, current gnorm
3.704611256068e+16 lambda=1.0000000000000004e-06
Line search: Cubic step no good, shrinking lambda, current gnorm
3.704611256068e+16 lambda=1.0000000000000005e-07
Line search: Cubic step no good, shrinking lambda, current gnorm
3.704611256068e+16 lambda=1.0000000000000005e-08
Line search: Cubic step no good, shrinking lambda, current gnorm
3.704611256068e+16 lambda=1.0000000000000005e-09
Line search: Cubic step no good, shrinking lambda, current gnorm
3.704611256068e+16 lambda=1.0000000000000006e-10
Line search: Cubic step no good, shrinking lambda, current gnorm
3.704611256068e+16 lambda=1.0000000000000006e-11
Line search: Cubic step no good, shrinking lambda, current gnorm
3.704611256068e+16 lambda=1.0000000000000006e-12
Line search: Cubic step no good, shrinking lambda, current gnorm
3.704611256068e+16 lambda=1.0000000000000007e-13
Line search: unable to find good step length! After 12 tries
Line search: fnorm=1.2062892452882465e+01,
gnorm=3.7046112560677824e+16, ynorm=1.0000000000000000e+08,
minlambda=9.9999999999999998e-13, lambda=1.0000000000000007e-13, initial
slope=-4.6079597780656769e+00
Nonlinear solve did not converge due to DIVERGED_LINE_SEARCH iterations 0
So it is clear that the Jacobian do not match. Moreover, it appears that
Newton is not going to converge from this initial guess. It suggests that
the residual is wrong somehow. I suggest coding up a MMS to prove to
yourself that the residual is correct.
Thanks,
Matt
> David Jiawei LUO LIANG
>
> 南方科技大学/学生/研究生/2024
>
> 广东省深圳市南山区学苑大道1088号
>
>
--
What most experimenters take for granted before they begin their
experiments is infinitely more interesting than any results to which their
experiments lead.
-- Norbert Wiener
https://urldefense.us/v3/__https://www.cse.buffalo.edu/*knepley/__;fg!!G_uCfscf7eWS!bqnXB8rtlhm_qgLy5xeRj_mY4Rqfdgmupvjaqg3sArtduMag3ojG26K4cpDZok4CHJJwjxsl6911GOeurhJ1$ <https://urldefense.us/v3/__http://www.cse.buffalo.edu/*knepley/__;fg!!G_uCfscf7eWS!bqnXB8rtlhm_qgLy5xeRj_mY4Rqfdgmupvjaqg3sArtduMag3ojG26K4cpDZok4CHJJwjxsl6911GJCZvJG0$ >
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20241121/37872e65/attachment.html>
More information about the petsc-users
mailing list