[petsc-dev] -snes_check_jacobian

Barry Smith bsmith at mcs.anl.gov
Thu Dec 13 16:55:47 CST 2012


   I got sick of -snes_type test only checking the Jacobian at the initial solution and not being able to test later Jacobians so I added -snes_check_jacobian that allows the regular running of SNESSolve() (also inside TS) and compares every Jacobian computed with a finite difference version. 

  For example, (already found one bug in one example :-(). This may be the best thing I've added to PETSc in a decade.

   Barry


Barrys-MacBook-Pro:advection-diffusion-reaction barrysmith$ ./ex1 -snes_check_jacobian -snes_monitor  -ts_type arkimex | more
    0 SNES Function norm 2.182384017537e+00 
        Testing hand-coded Jacobian, if the ratio is O(1.e-8), the hand-coded Jacobian is probably correct.
        Run with -snes_check_jacobian_display to show difference of hand-coded and finite difference Jacobian.
      1.68322e-09 = ||J - Jfd||//J|| 6.69028e-06  = ||J - Jfd||
    1 SNES Function norm 4.695397453383e-07 
        Testing hand-coded Jacobian, if the ratio is O(1.e-8), the hand-coded Jacobian is probably correct.
        Run with -snes_check_jacobian_display to show difference of hand-coded and finite difference Jacobian.
      2.45109e-09 = ||J - Jfd||//J|| 9.74235e-06  = ||J - Jfd||
    2 SNES Function norm 4.020379099215e-13 
    0 SNES Function norm 6.799718390407e-01 
        Testing hand-coded Jacobian, if the ratio is O(1.e-8), the hand-coded Jacobian is probably correct.
        Run with -snes_check_jacobian_display to show difference of hand-coded and finite difference Jacobian.
      1.65487e-09 = ||J - Jfd||//J|| 6.5776e-06  = ||J - Jfd||
    1 SNES Function norm 4.558192078678e-08 
        Testing hand-coded Jacobian, if the ratio is O(1.e-8), the hand-coded Jacobian is probably correct.
        Run with -snes_check_jacobian_display to show difference of hand-coded and finite difference Jacobian.
      2.93714e-09 = ||J - Jfd||//J|| 1.16742e-05  = ||J - Jfd||
    2 SNES Function norm 9.907308296870e-14 
    0 SNES Function norm 1.000842117652e+00 
        Testing hand-coded Jacobian, if the ratio is O(1.e-8), the hand-coded Jacobian is probably correct.
        Run with -snes_check_jacobian_display to show difference of hand-coded and finite difference Jacobian.
      1.24476e-09 = ||J - Jfd||//J|| 4.94755e-06  = ||J - Jfd||
    1 SNES Function norm 9.875108391772e-08 
        Testing hand-coded Jacobian, if the ratio is O(1.e-8), the hand-coded Jacobian is probably correct.
        Run with -snes_check_jacobian_display to show difference of hand-coded and finite difference Jacobian.
      1.10818e-10 = ||J - Jfd||//J|| 4.40468e-07  = ||J - Jfd||
    2 SNES Function norm 7.677760150017e-14 
    0 SNES Function norm 2.179048757949e+00 
        Testing hand-coded Jacobian, if the ratio is O(1.e-8), the hand-coded Jacobian is probably correct.
        Run with -snes_check_jacobian_display to show difference of hand-coded and finite difference Jacobian.
      1.32338e-09 = ||J - Jfd||//J|| 5.27058e-07  = ||J - Jfd||
    1 SNES Function norm 4.625448863612e-05 
        Testing hand-coded Jacobian, if the ratio is O(1.e-8), the hand-coded Jacobian is probably correct.
        Run with -snes_check_jacobian_display to show difference of hand-coded and finite difference Jacobian.
      1.57582e-09 = ||J - Jfd||//J|| 6.27588e-07  = ||J - Jfd||
    2 SNES Function norm 4.391784647745e-14 
    0 SNES Function norm 6.761591873515e-01 
        Testing hand-coded Jacobian, if the ratio is O(1.e-8), the hand-coded Jacobian is probably correct.





More information about the petsc-dev mailing list