<div class="gmail_extra">On Wed, Apr 25, 2012 at 1:23 PM, Dominik Szczerba <span dir="ltr">&lt;<a href="mailto:dominik@itis.ethz.ch" target="_blank">dominik@itis.ethz.ch</a>&gt;</span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
&gt;&gt; Now I want to reproduce the same results without providing the<br>
&gt;&gt; Jacobian, preparing for future real life cases where it will not be<br>
&gt;&gt; known. I am under the impression that Petsc can approximate the<br>
&gt;&gt; Jacobian itself using some sort of secant method. How exactly am I<br>
&gt;&gt; supposed to use it? If I change nothing in the code, just pass<br>
&gt;&gt; -snes_mf_operator to the options, the solver stagnates. The same if I<br>
&gt;&gt; fill the Jacobian with zeros. The same if only with A. What am I<br>
&gt;&gt; supposed to do without the known Jacobian to trigger its<br>
&gt;&gt; approximation?<br>
&gt;<br>
&gt;<br>
&gt; Run with -ksp_monitor_true_residual -ksp_converged_reason -snes_monitor<br>
&gt; -snes_converged_reason -snes_ls_monitor -snes_view and send the output.<br>
<br>
I see the following stagnated output:<br></blockquote><div><br></div><div>Start by comparing residuals, with an without. Is SNES 0 the same? Is KSP 0 the same? KSP 1?</div><div>Notice that the true residual norm is monotonically increasing, leading me to believe that the</div>
<div>preconditioner is rank deficient since GMRES should never allow increase.</div><div><br></div><div>    Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

0 SNES Function norm 1.747536282885e+01<br>
  0 KSP unpreconditioned resid norm 1.747536282885e+01 true resid norm<br>
1.747536282885e+01 ||r(i)||/||b|| 1.000000000000e+00<br>
  1 KSP unpreconditioned resid norm 6.112827145626e-01 true resid norm<br>
1.751036369876e+01 ||r(i)||/||b|| 1.002002869425e+00<br>
  2 KSP unpreconditioned resid norm 6.046520497681e-01 true resid norm<br>
2.300357730584e+01 ||r(i)||/||b|| 1.316343330386e+00<br>
  3 KSP unpreconditioned resid norm 5.994471388765e-01 true resid norm<br>
5.655832090079e+01 ||r(i)||/||b|| 3.236460464638e+00<br>
  4 KSP unpreconditioned resid norm 5.974054975332e-01 true resid norm<br>
5.997203971117e+01 ||r(i)||/||b|| 3.431805124649e+00<br>
  5 KSP unpreconditioned resid norm 5.956696306552e-01 true resid norm<br>
9.280866979439e+01 ||r(i)||/||b|| 5.310829348914e+00<br>
  6 KSP unpreconditioned resid norm 5.944323800377e-01 true resid norm<br>
9.573083746155e+01 ||r(i)||/||b|| 5.478045772159e+00<br>
  7 KSP unpreconditioned resid norm 5.933318368437e-01 true resid norm<br>
1.283420019927e+02 ||r(i)||/||b|| 7.344168086790e+00<br>
  8 KSP unpreconditioned resid norm 5.924396174526e-01 true resid norm<br>
1.311457478032e+02 ||r(i)||/||b|| 7.504608006575e+00<br>
  9 KSP unpreconditioned resid norm 5.916244555561e-01 true resid norm<br>
1.636933991914e+02 ||r(i)||/||b|| 9.367095882044e+00<br>
 10 KSP unpreconditioned resid norm 5.909266031948e-01 true resid norm<br>
1.664685701658e+02 ||r(i)||/||b|| 9.525900652028e+00<br>
 11 KSP unpreconditioned resid norm 5.902780068683e-01 true resid norm<br>
1.989974529969e+02 ||r(i)||/||b|| 1.138731452650e+01<br>
 12 KSP unpreconditioned resid norm 5.897052848025e-01 true resid norm<br>
2.017662138832e+02 ||r(i)||/||b|| 1.154575248933e+01<br>
 13 KSP unpreconditioned resid norm 5.891666923831e-01 true resid norm<br>
2.342886435057e+02 ||r(i)||/||b|| 1.340679708915e+01<br>
<br>
and so on, excessively long<br>
<br>
&gt; Your SNES callback gets two Mat arguments, into which are you assembling<br>
&gt; your approximate Jacobian?<br>
<br>
I am assembling my (exact) Jacobian in the second (preconditioner) matrix.<br>
<br>
&gt; Are you still calling MatAssemblyBegin/End on the<br>
&gt; first argument, as in the examples?<br>
<br>
Yes, I do.<br>
<br>
The moment I remove -snes_mf_operator from the options I get the<br>
expected results in the expected time.<br>
<span class="HOEnZb"><font color="#888888"><br>
Dominik<br>
</font></span></blockquote></div><br><br clear="all"><div><br></div>-- <br>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>
-- Norbert Wiener<br>
</div>