[petsc-users] Strange behavior of TS after setting hand-coded Jacobian

仓宇 yhcy1993 at gmail.com
Thu Oct 28 22:10:05 CDT 2021


Thanks for your kind reply.

Actually, I've checked the ascii output of '-snes_test_jacobian_view'
already, but these detailed diagnostics were not attached in the
previous post. It shows no difference between finite-difference and
hand-coded jacobian matrices. So I declared that the hand-coded
jacobian is correct in previous post.

Regards

Yu Cang

Zhang, Hong <hongzhang at anl.gov> 于2021年10月27日周三 下午10:43写道:
>
> Since your Jacobian matrix is small, it is possible to compare your hand-written Jacobian with the finite-difference approximation directly. Add -snes_test_jacobian_view to print out the matrices. Then you can see exactly where the difference is.
>
> Hong
>
> > On Oct 27, 2021, at 12:47 AM, 仓宇 <yhcy1993 at gmail.com> wrote:
> >
> > Thanks for your kind reply.
> >
> > Several comparison tests have been performed. Attached are execution
> > output files. Below are corresponding descriptions.
> >
> > good.txt -- Run without hand-coded jacobian, solution converged, with
> > option '-ts_monitor -snes_monitor -snes_converged_reason
> > -ksp_monitor_true_residual -ksp_converged_reason';
> > jac1.txt -- Run with hand-coded jacobian, does not converge, with
> > option '-ts_monitor -snes_monitor -snes_converged_reason
> > -ksp_monitor_true_residual -ksp_converged_reason -snes_test_jacobian';
> > jac2.txt -- Run with hand-coded jacobian, does not converge, with
> > option '-ts_monitor -snes_monitor -snes_converged_reason
> > -ksp_monitor_true_residual -ksp_converged_reason -snes_test_jacobian
> > -ksp_view';
> > jac3.txt -- Run with hand-coded jacobian, does not converge, with
> > option '-ts_monitor -snes_monitor -snes_converged_reason
> > -ksp_monitor_true_residual -ksp_converged_reason -snes_test_jacobian
> > -ksp_view -ts_max_snes_failures -1 ';
> >
> > The problem under consideration contains an eigen-value to be solved,
> > making the first diagonal element of the jacobian matrix being zero.
> > From these outputs, it seems that the PC failed to factorize, which is
> > caused by this 0 diagonal element.  But I'm wondering why it works
> > with jacobian matrix generated by finite-difference? Would employing
> > DMDA for discretization be helpful?
> >
> > Regards
> >
> > Yu Cang
> >
> > Barry Smith <bsmith at petsc.dev> 于2021年10月25日周一 下午10:50写道:
> >>
> >>
> >>  It is definitely unexpected that -snes_test_jacobian verifies the Jacobian as matching but the solve process is completely different.
> >>
> >>   Please run with -snes_monitor -snes_converged_reason -ksp_monitor_true_residual -ksp_converged_reason -snes_test_jacobian and send all the output
> >>
> >>  Barry
> >>
> >>
> >>> On Oct 25, 2021, at 9:53 AM, 仓宇 <yhcy1993 at gmail.com> wrote:
> >>>
> >>> I'm using TS to solve a set of DAE, which originates from a
> >>> one-dimensional problem. The grid points are uniformly distributed.
> >>> For simplicity, the DMDA is not employed for discretization.
> >>>
> >>> At first, only the residual function is prescribed through
> >>> 'TSSetIFunction', and PETSC produces converged results. However, after
> >>> providing hand-coded Jacobian through 'TSSetIJacobian', the internal
> >>> SNES object fails (residual norm does not change), and TS reports
> >>> 'DIVERGED_STEP_REJECTED'.
> >>>
> >>> I have tried to add the option '-snes_test_jacobian' to see if the
> >>> hand-coded jacobian is somewhere wrong, but it shows '||J -
> >>> Jfd||_F/||J||_F = 1.07488e-10, ||J - Jfd||_F = 2.14458e-07',
> >>> indicating that the hand-coded jacobian is correct.
> >>>
> >>> Then, I added a monitor for the internal SNES object through
> >>> 'SNESMonitorSet', in which the solution vector will be displayed at
> >>> each iteration. It is interesting to find that, if the jacobian is not
> >>> provided, meaning finite-difference is utilized for jacobian
> >>> evaluation internally, the solution vector converges to steady
> >>> solution and the SNES residual norm is reduced continuously. However,
> >>> it turns out that, as long as the jacobian is provided, the solution
> >>> vector will NEVER get changed! So the solution procedure stucked!
> >>>
> >>> This is quite strange!  Hope to get some advice.
> >>> PETSC version=3.14.6, program run in serial mode.
> >>>
> >>> Regards
> >>>
> >>> Yu Cang
> >>
> > <jac3.txt><jac2.txt><jac1.txt><good.txt>
>


More information about the petsc-users mailing list