[petsc-users] Snes ex22.c
Barry Smith
bsmith at mcs.anl.gov
Mon Mar 29 17:48:16 CDT 2010
Ryan,
This is because the "explicit Jacobian" computed in ex22.c is
not correct. Run with -snes_type test -dmmg_nlevels 1
This is because the code cannot determine the nonzero structure
of the Jacobian and (also) hence a coloring of the Jacobian.
If you run with -dmcomposite_dense_jacobian it will converge the
same way (it treats the Jacobian as dense hence does get the Jacobian
computation correct). See the source code for DMComposite in src/dm/da/
utils/pack.c
The routine DMCompositeSetCoupling() provides support for the
user code to indicate any additional coupling between the different
parts of the Jacobian. tutorials/multiphysics/mp.c shows an example of
using this routine.
The DMComposite stuff in PETSc is pretty rough.
I will add a note to ex22.c explaining why it doesn't work with
matrix based.
Barry
On Mar 29, 2010, at 11:17 AM, Ryan Yan wrote:
> Dear All,
> Could someone help to answer a question about snes/ex22.c?
> I runed the program twice with two different option sets.
>
> In the first run, I used:
> mpirun -np 1 ./ex22 -da_grid_x 10 -snes_monitor
>
> this will invoke all the matrix_free_options at line 96. It is
> shown that on all grid levels we have a aggressive convergence.
> http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-current/src/snes/examples/tutorials/ex22.c.html
> 0 SNES Function norm 6.285393610547e-01
> 1 SNES Function norm 3.743759728398e-06
> 2 SNES Function norm 2.855651342153e-11
> 0 SNES Function norm 4.708310005567e-01
> 1 SNES Function norm 2.696769540300e-06
> 2 SNES Function norm 9.009613143190e-12
> 0 SNES Function norm 3.456250981375e-01
> 1 SNES Function norm 3.224179904192e-07
> 2 SNES Function norm 8.831908707996e-13
> 0 SNES Function norm 2.565116065949e-01
> 1 SNES Function norm 2.781184363175e-08
> 2 SNES Function norm 1.880008919009e-14
> 0 SNES Function norm 1.957654311750e-01
> 1 SNES Function norm 4.039546692288e-07
> 2 SNES Function norm 3.668272652964e-13
>
>
> In the second run, I use the matrix based method, with the following
> options
> mpirun -np 1 ./ex22 -da_grid_x 10 -use_matrix_based -ksp_type fgmres
> -snes_monitor
> (The reason why I use fgmres is because I want to compare the result
> with the first run.)
> No significant convergence can be obtained at this run.
> 0 SNES Function norm 6.285393610547e-01
> 1 SNES Function norm 1.646083626629e-01
> 0 SNES Function norm 6.321514185793e-01
> 0 SNES Function norm 1.046493792681e+00
> 0 SNES Function norm 1.906667654680e+00
> 0 SNES Function norm 3.721097900524e+00
>
>
> I have checked the ksp_view and snes_view for both cases. The only
> difference seems to me is that in the first run it is using matrix
> free method to achieve MatVec for the GMRES method(inside the
> Multigrid preconditioner ) for the error equation, and in the second
> run it is using a concrete matrix obtained from finite difference to
> achieve MatVec for the GMRES method(inside the Multigrid
> preconditioner ) for the error equation.
>
> An deeper check using -ksp_monitor will show that for the second
> run, within each newton inner loop the ksp residual stagnates.
>
> I guess my question is: Is this behavior normal and how to
> understand this?
> Or is there any other difference that I did not see in those two
> different test runs, except the way they use to achieve the MatVec?
>
> Thank you very much,
>
> Yan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20100329/37cbc50a/attachment.htm>
More information about the petsc-users
mailing list