The true residual decreases nicely without matrix free operator, otherwise 
it does not decrease.  This likely means the preconditioner is no good for the 
matrix free, but is good for the matrix based. This means that the matrix based 
multiply is not the same as the matrix free multiply. These means one of the 
matrix multiplies is wrong. My guess is that your "exact" Jacobian  is wrong. 
Run with -snes_type test and see what it reports.

   You can also run the code with the options -snes_mf -pc_type none and then 
again with just -pc_type none (just for a few KSP iterations) and compare the 
residual norms. If the matrix free and the matrix define the same matrix vector 
product then these residuals for the first few iterations should be pretty 
similar.


   Barry

On Apr 25, 2012, at 12:42 PM, Dominik Szczerba wrote:

>> Start by comparing residuals, with an without. Is SNES 0 the same? Is KSP 0
>> the same? KSP 1?
> 
> BCGS, with the option:
> 
>  0 SNES Function norm 1.747536282885e+01
>  0 KSP unpreconditioned resid norm 1.747536282885e+01 true resid norm
> 1.747536282885e+01 ||r(i)||/||b|| 1.000000000000e+00
>  1 KSP unpreconditioned resid norm 6.112827145626e-01 true resid norm
> 1.751036369876e+01 ||r(i)||/||b|| 1.002002869425e+00
> 
> BCGS, without:
> 
>  0 SNES Function norm 1.747536282885e+01
>  0 KSP unpreconditioned resid norm 1.747536282885e+01 true resid norm
> 1.747536282885e+01 ||r(i)||/||b|| 1.000000000000e+00
>  1 KSP unpreconditioned resid norm 2.930616102426e-01 true resid norm
> 2.930616102426e-01 ||r(i)||/||b|| 1.676998715922e-02
> 
> GMRES, with the option:
> 
>  0 SNES Function norm 1.747536282885e+01
>  0 KSP unpreconditioned resid norm 1.747536282885e+01 true resid norm
> 1.747536282885e+01 ||r(i)||/||b|| 1.000000000000e+00
>  1 KSP unpreconditioned resid norm 6.122286256494e-01 true resid norm
> 1.747536251439e+01 ||r(i)||/||b|| 9.999999820055e-01
> 
> GMRES, without:
> 
>  0 SNES Function norm 1.747536282885e+01
>  0 KSP unpreconditioned resid norm 1.747536282885e+01 true resid norm
> 1.747536282885e+01 ||r(i)||/||b|| 1.000000000000e+00
>  1 KSP unpreconditioned resid norm 6.122286294217e-01 true resid norm
> 6.122286294218e-01 ||r(i)||/||b|| 3.503381505824e-02
> 
> Dominik

Reply via email to