Matrix free example snes/ex20.c
Vijay M
vijay.m at gmail.com
Mon Dec 31 18:06:17 CST 2007
Barry,
Thanks for the detailed explanation. That sure is a tricky and interesting
problem. I did run the problem with the options you suggested and see what
you mean.
I just have one another question though that is not quite related to the
example: Say when you do J-free Newton-Krylov iteration, then is it correct
to say that the F.D calculation of the action of Jacobian on a vector is
more accurate than using a numerical Jacobian (not analytical) found at the
start of a Newton iteration ? Because even though in both cases, the
Jacobian is technically found by perturbation about the last Newton
iteration, it seems to me that there is some gain in this convergence
respect with J-free immaterial of the problem being solved. Now is that
confusing or am I making sense ? I'll be glad to explain more on that and
awaiting to hear your comments.
Well, happy new year to you Barry and all the PETSc team !!
Cheers,
Vijay
-----Original Message-----
From: owner-petsc-users at mcs.anl.gov [mailto:owner-petsc-users at mcs.anl.gov]
On Behalf Of Barry Smith
Sent: Sunday, December 30, 2007 4:51 PM
To: petsc-users at mcs.anl.gov
Subject: Re: Matrix free example snes/ex20.c
Vijay,
This is a very cool problem.
Because of the exact symmetry of the domain the EXACT Jacobian
at each step has exactly 9 different eigenvalues. This means the
GMRES will take exactly 9 iterations (and "completely" converge in
the ninth iteration) if the "exact" Jacobian is used. You can run with
-pc_type none -snes_mf -ksp_monitor_singular_value -
ksp_plot_eigenvalues -display :0.0 -draw_pause -1
to see the 9 eigenvalues.
Now run without the -snes_mf option. You will see the first Newton
iteration's
eigenvalues still look like 9; but starting at the second Newton
iteration the
"identical" eigenvalues are now not all identically placed so GMRES
needs
more iterations.
The question then becomes how come the matrix-free application of
the Jacobian is more accurate than actually computing it as a sparse
matrix then applying it? Here is my non-rigorous answer; the
multiplication
of the sparse matrix values (even if very accurate) against the vector
introduces
some rounding error that screws up the eigenvalues slightly. For some
reason
for this problem the matrix-free application is accurate enough not to
perturb the eigenvalues.
Barry
On Dec 30, 2007, at 2:19 PM, Vijay M wrote:
> I ran both the cases with -ksp_monitor on and have attached the
> output in
> two different files. 1.txt is the Jfree case and 2.txt is the
> analytical
> case.
>
> Barry, the example problem is ex20 from the snes tutorial directory.
> The
> petsc version is 2.3.3-p7 if that helps to clear things a little.
> Now I
> haven't yet completely checked for a bug in the analytical Jacobian
> but I
> would imagine that if it were incorrect, wouldn't that affect only
> how the
> nonlinear iteration converges and not the linear iteration since the
> matrix
> sparsity structure is still the same (well assuming the condition
> number is
> not very different from the exact Jacobian !). Just my 2 cents.
>
> Anyway, I will look into the code for ex20 and then see if something
> is
> messed up. Let me know if you find out the problem from the output.
>
> Thanks,
> Vijay
>
>> I understand that both the methods will not give me the same number
>> of total
>> linear iterations but a factor of 2 seems a little odd to me.
>
> Yes, this is surprising.
>
> Run with -ksp_monitor how are the linear convergence different?
>
>> This leads to
>> another question whether the user can actually change the epsilon
>> used for
>> computing the perturbation in J-free scheme or is this fixed in
>> PETSc ?
>
> Yes, see the manual page for MatMFFDSetFromOptions() and related
> manual
> pages.
>
>>
>>
>> If not, then what do you think is the reason for this ?
>
> Bug in your analytic Jacobian? Run with -snes_monitor and -
> ksp_monitor and
> send all output.
>
> Barry
>
>> Do let me know your
>> comments when you get some time. Thanks.
>>
>> Vijay
>>
>> -----Original Message-----
>> From: owner-petsc-users at mcs.anl.gov [mailto:owner-petsc-users at mcs.anl.gov
>> ]
>> On Behalf Of Matthew Knepley
>> Sent: Saturday, December 29, 2007 9:05 PM
>> To: petsc-users at mcs.anl.gov
>> Subject: Re: Matrix free example snes/ex20.c
>>
>> On Dec 29, 2007 8:07 PM, Vijay M <vijay.m at gmail.com> wrote:
>>> Hi all,
>>>
>>> I was trying to compile and run the ex20.c example code in the
>>> tutorial
>>> section of SNES. Although it does not explicitly specify that -
>>> snes_mf
>>> option can be used, my understanding is that as long as a nonlinear
>> residual
>>> function is written correctly, PETSc will calculate via finite
>>> difference
>>> the action of the Jacobian on a given vector. Is that correct ?
>>
>> Yes.
>>
>>> Now if that is the case, then please observe the discrepancy in the
>>> number
>>> of linear iterations taken with an analytical Jacobian and matrix-
>>> free
>>> option. What puzzles me is that the SNES function norm are quite
>>> close for
>>> both the methods but the linear iterations differ by a factor of 3.
>>> Why
>>> exactly is this ?
>>
>> There is no PC when using -snes_mf whereas the default is ILU for the
>> analytic
>> Jacobian.
>>
>> Matt
>>
>>> Here's the output to make this clearer.
>>>
>>> vijay :mpirun -np 1 ex20 -ksp_type gmres -snes_monitor
>>>
>>> 0 SNES Function norm 2.271442542876e-01
>>>
>>> 1 SNES Function norm 6.881516100891e-02
>>>
>>> 2 SNES Function norm 1.813939751552e-02
>>>
>>> 3 SNES Function norm 2.354176462207e-03
>>>
>>> 4 SNES Function norm 3.063728077362e-05
>>>
>>> 5 SNES Function norm 3.106106268946e-08
>>>
>>> 6 SNES Function norm 5.344742712545e-12
>>>
>>> 0 SNES Function norm 2.271442542876e-01
>>>
>>> 1 SNES Function norm 6.881516100891e-02
>>>
>>> 2 SNES Function norm 1.813939751552e-02
>>>
>>> 3 SNES Function norm 2.354176462207e-03
>>>
>>> 4 SNES Function norm 3.063728077362e-05
>>>
>>> 5 SNES Function norm 3.106106268946e-08
>>>
>>> 6 SNES Function norm 5.344742712545e-12
>>>
>>> Number of Newton iterations = 6
>>>
>>> Number of Linear iterations = 18
>>>
>>> Average Linear its / Newton = 3.000000e+00
>>>
>>>
>>>
>>> vijay :mpirun -np 1 ex20 -ksp_type gmres -snes_monitor -snes_mf
>>>
>>> 0 SNES Function norm 2.271442542876e-01
>>>
>>> 1 SNES Function norm 6.870629867542e-02
>>>
>>> 2 SNES Function norm 1.804335379848e-02
>>>
>>> 3 SNES Function norm 2.290074339682e-03
>>>
>>> 4 SNES Function norm 3.082384186373e-05
>>>
>>> 5 SNES Function norm 3.926396277038e-09
>>>
>>> 6 SNES Function norm 3.754922566585e-16
>>>
>>> 0 SNES Function norm 2.271442542876e-01
>>>
>>> 1 SNES Function norm 6.870629867542e-02
>>>
>>> 2 SNES Function norm 1.804335379848e-02
>>>
>>> 3 SNES Function norm 2.290074339682e-03
>>>
>>> 4 SNES Function norm 3.082384186373e-05
>>>
>>> 5 SNES Function norm 3.926396277038e-09
>>>
>>> 6 SNES Function norm 3.754922566585e-16
>>>
>>> Number of Newton iterations = 6
>>>
>>> Number of Linear iterations = 54
>>>
>>> Average Linear its / Newton = 9.000000e+00
>>>
>>>
>>>
>>> Thanks,
>>>
>>> Vijay
>>>
>>>
>>
>>
>>
>> --
>> What most experimenters take for granted before they begin their
>> experiments is infinitely more interesting than any results to which
>> their experiments lead.
>> -- Norbert Wiener
>>
> <1.txt><2.txt>
More information about the petsc-users
mailing list