Try with -snes_mf_operator from the manual page of SNESSetPicard() this 
indicates that  with Newton's method using A(x^{n}) to construct the 
preconditioner.

> On Dec 26, 2018, at 7:48 AM, Yingjie Wu via petsc-users 
> <petsc-users@mcs.anl.gov> wrote:
> 
> Dear Petsc developers:
> Hi,
> 1. I tried to use the Picard solver in Petsc, but the program didn't 
> converge. My program is still a thermal program that contains multiple 
> physical fields, and is a PDEs' problem. The error message is as follows. The 
> reason I use Picard is that it can guarantee convergence(though slow and 
> expensive). I follow the ex15.c, but I don't use DM to organize the solution 
> vector. So I try the SNESSetPicard().
> 0 SNES Function norm 2.91302e+08 
>     0 KSP Residual norm 5.79907e+08 
>     1 KSP Residual norm 1.46843e-05 
>   Linear solve converged due to CONVERGED_RTOL iterations 1
>   1 SNES Function norm 2.891e+08 
>     0 KSP Residual norm 5.5989e+08 
>     1 KSP Residual norm 4.21314e-06 
>   Linear solve converged due to CONVERGED_RTOL iterations 1
>   2 SNES Function norm 2.78289e+08 
>     0 KSP Residual norm 5.53553e+08 
>     1 KSP Residual norm 2.04076e-05 
>   Linear solve converged due to CONVERGED_RTOL iterations 1
>   3 SNES Function norm 2.77833e+08 
>     0 KSP Residual norm 5.52907e+08 
>     1 KSP Residual norm 2.09919e-05 
>   Linear solve converged due to CONVERGED_RTOL iterations 1
>   4 SNES Function norm 2.77821e+08 
>     0 KSP Residual norm 5.52708e+08 
>     1 KSP Residual norm 2.08677e-05 
>   Linear solve converged due to CONVERGED_RTOL iterations 1
> Nonlinear solve did not converge due to DIVERGED_LINE_SEARCH iterations 4
> SNES Object: 1 MPI processes
>   type: newtonls
>   maximum iterations=50, maximum function evaluations=10000
>   tolerances: relative=1e-08, absolute=1e-50, solution=1e-08
>   total number of linear solver iterations=5
>   total number of function evaluations=34
>   norm schedule ALWAYS
>   SNESLineSearch Object: 1 MPI processes
>     type: bt
>       interpolation: cubic
>       alpha=1.000000e-04
>     maxstep=1.000000e+08, minlambda=1.000000e-12
>     tolerances: relative=1.000000e-08, absolute=1.000000e-15, 
> lambda=1.000000e-08
>     maximum iterations=40
>   KSP Object: 1 MPI processes
>     type: gmres
>       restart=30, using Classical (unmodified) Gram-Schmidt Orthogonalization 
> with no iterative refinement
>       happy breakdown tolerance 1e-30
>     maximum iterations=10000, initial guess is zero
>     tolerances:  relative=1e-05, absolute=1e-50, divergence=10000.
>     left preconditioning
>     using PRECONDITIONED norm type for convergence test
>   PC Object: 1 MPI processes
>     type: lu
>       out-of-place factorization
>       tolerance for zero pivot 2.22045e-14
>       matrix ordering: nd
>       factor fill ratio given 5., needed 5.48356
>         Factored matrix follows:
>           Mat Object: 1 MPI processes
>             type: seqaij
>             rows=11368, cols=11368
>             package used to perform factorization: petsc
>             total: nonzeros=234554, allocated nonzeros=234554
>             total number of mallocs used during MatSetValues calls =0
>               not using I-node routines
>     linear system matrix = precond matrix:
>     Mat Object: 1 MPI processes
>       type: seqaij
>       rows=11368, cols=11368
>       total: nonzeros=42774, allocated nonzeros=56840
>       total number of mallocs used during MatSetValues calls =0
>         not using I-node routines
> Are there any other examples of Picard methods? I'm very interested in this 
> method.
> 
> 2. I found that in ex15.c and ex19.c use the NonlinearGS. I know it's a 
> iterative method. I don't know how to use this method in above examples.  As 
> for as I know, NonlinearGS is an iterative method parallel to subspace 
> method. NonlinearGS should not be required if subspace methods are used. 
> 
> Thanks,
> Yingjie
>  
> 

Reply via email to