[petsc-users] Issue with SNES Solver in Fortran - Converging with Zero Residual

Barry Smith bsmith at petsc.dev
Fri Apr 14 12:45:15 CDT 2023


   Likely there is an issue with the FormFunction you are providing. For a small problem you can call VecView() on the input vector at the start of your routine
and then VecView() on the output vector at the end of your routine. This might provide some insight. Since the output vector is presumably all zero you can try 
running in the debugger and trace through the second call to your FormFunction to see why it generating exactly zero output when it presumably should not be.

  Barry


> On Apr 14, 2023, at 12:39 PM, Khaled Nabil Shar Abdelaziz <kabdelaz at purdue.edu> wrote:
> 
> Hello,
> I hope you are well. I am currently working with the SNES solver in Fortran, utilizing Newton's method. I have provided both the residual function and the Jacobian. However, I have encountered an issue that I hope you can help me with.
>  
> In the first non-linear iteration, the solver calculates a non-zero residual value and starts the KSP solver to minimize the error. However, in the second non-linear iteration, it returns an exact zero residual, considering it converged.
>  
> As a result, the first few steps provide a somewhat accurate solution, but after around 15 steps, the solution starts diverging rapidly. I assume this is due to accumulating errors, as the residual in subsequent steps becomes increasingly larger.
>  
> Here are some outputs from the solver:
>  
> start_SNES_petsc_solver: var_nd%name=u
>   0 SNES Function norm 3.412918650183e+01 
>  Attempt!
>     0 KSP Residual norm 5.861642176595e-01 
>     1 KSP Residual norm 1.411858179645e-01 
>     2 KSP Residual norm 1.388288156571e-01 
>     3 KSP Residual norm 4.900215159087e-02 
>     4 KSP Residual norm 2.559630070894e-02 
>     5 KSP Residual norm 1.007110997387e-02 
>     6 KSP Residual norm 6.371175598940e-03 
>   1 SNES Function norm 0.000000000000e+00 
>  iteration=           1
> SNESConvergedReason=           2
>  
>  
> istep=       1
> ******************************
>  
> start_SNES_petsc_solver: var_nd%name=u
>   0 SNES Function norm 6.831896456736e+01 
>  Attempt!
>     0 KSP Residual norm 5.850729730568e+00 
>     1 KSP Residual norm 5.176135972454e+00 
>     2 KSP Residual norm 5.106059774079e-01 
>     3 KSP Residual norm 2.058573608172e-01 
>     4 KSP Residual norm 8.430267458444e-02 
>     5 KSP Residual norm 2.421049820170e-02 
>     6 KSP Residual norm 1.387479046692e-02 
>     7 KSP Residual norm 6.556624109622e-03 
>   1 SNES Function norm 0.000000000000e+00 
>  iteration=           1
> SNESConvergedReason=           2
>  
> istep=       2
> ******************************
>  
> start_SNES_petsc_solver: var_nd%name=u
>   0 SNES Function norm 1.024330722398e+02 
>  Attempt!
>     0 KSP Residual norm 1.324263482159e+01 
>     1 KSP Residual norm 8.772774639367e+00 
>     2 KSP Residual norm 8.717824082000e-01 
>     3 KSP Residual norm 3.965086318719e-01 
>     4 KSP Residual norm 1.380063519887e-01 
>     5 KSP Residual norm 3.983781619335e-02 
>     6 KSP Residual norm 1.690524902818e-02 
>     7 KSP Residual norm 1.371656480592e-02 
>     8 KSP Residual norm 4.598826535286e-03 
>   1 SNES Function norm 0.000000000000e+00 
>  iteration=           1
> SNESConvergedReason=           2
>  
> istep=       3
> ******************************
>  
> start_SNES_petsc_solver: var_nd%name=u
>   0 SNES Function norm 1.371337889713e+02 
>  Attempt!
>     0 KSP Residual norm 1.823603533770e+01 
>     1 KSP Residual norm 1.823546028484e+01 
>     2 KSP Residual norm 8.167385988622e-01 
>     3 KSP Residual norm 1.930526020067e-01 
>     4 KSP Residual norm 1.768873013055e-01 
>     5 KSP Residual norm 2.692456250466e-02 
>     6 KSP Residual norm 1.130530545617e-02 
>     7 KSP Residual norm 6.934825615412e-03 
>   1 SNES Function norm 0.000000000000e+00 
>  iteration=           1
> SNESConvergedReason=           2
>  
> istep=       4
> ******************************
>  
> start_SNES_petsc_solver: var_nd%name=u
>   0 SNES Function norm 1.717647834464e+02 
>  Attempt!
>     0 KSP Residual norm 1.015846744437e+02 
>     1 KSP Residual norm 7.622793741160e+00 
>     2 KSP Residual norm 1.381803723895e+00 
>     3 KSP Residual norm 1.305423467184e-01 
>     4 KSP Residual norm 3.606398975875e-02 
>     5 KSP Residual norm 3.463999556864e-02 
>     6 KSP Residual norm 3.268229989659e-02 
>     7 KSP Residual norm 8.847393497789e-03 
>   1 SNES Function norm 0.000000000000e+00 
>  iteration=           1
> SNESConvergedReason=           2
>  
> Do you have any idea what might be causing this behavior? I appreciate any insights you might have.
>  
> Best,
> Khaled

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20230414/735e85ae/attachment.html>


More information about the petsc-users mailing list