Thank you Jed. It works, and the result is identical to the exact solution!
Hope you best! David Jiawei LUO LIANG 南方科技大学/学生/研究生/2024 广东省深圳市南山区学苑大道1088号 ------------------ Original ------------------ From: "Jed Brown"<j...@jedbrown.org>; Date: Thu, Nov 21, 2024 11:05 PM To: "David Jiawei LUO LIANG"<12431...@mail.sustech.edu.cn>; "petsc-users"<petsc-users@mcs.anl.gov>; Subject: Re: [petsc-users] Cannot iterate well when using Newton iteration of SNES You should add VecZeroEntries(f) near the top of your FormFunction (it's currently accumulating into whatever was there last) and MatZeroEntries(B) to FormJacobian. I reduced to nElem = 5 for ease of viewing. With these changes, I see quadratic convergence but the problem is still nonlinear. To explore further, consider using these diagnostics ./SNES_heat -{snes,ksp}_monitor -{snes,ksp}_converged_reason -snes_linesearch_monitor -ksp_view_mat with and without -snes_fd. For readability, I would suggest consistency in "u" vs "x". "David Jiawei LUO LIANG" <12431...@mail.sustech.edu.cn> writes: > 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"&nbsp; > > > when I run the code > > &nbsp; 0 SNES Function norm 1.206289245288e+01 > > &nbsp; 1 SNES Function norm 7.128802192789e+00 > > &nbsp; 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.&nbsp; > > > 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.&nbsp; > > > I doubt that whether my understanding of the newton iteration is different from SNES's newton iteration process. > > > > > > > > > David Jiawei LUO LIANG > > > > 南方科技大学/学生/研究生/2024 > > > > 广东省深圳市南山区学苑大道1088号 > > > > > &nbsp;