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;

Reply via email to