<div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Wed, Dec 26, 2018 at 8:50 AM Yingjie Wu via petsc-users <<a href="mailto:petsc-users@mcs.anl.gov">petsc-users@mcs.anl.gov</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><div>Dear Petsc developers:</div><div>Hi,</div><div>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).</div></div></div></blockquote><div><br></div><div>You can only guarantee convergence if your operator is a contraction. It does not appear to be, or you would not need a line</div><div>search at all. The line search is failing. You could try a different line search.</div><div><br></div><div>My guess is that since you have multiple fields, what you really need is a nonlinear version of PCFIELDSPLIT. I have been meaning</div><div>to code this up, but have not done it yet since all the ways I can think of doing it are really intrusive. You can put this together by hand</div><div>by making residual functions for the individual parts.</div><div><br></div><div>  Thanks,</div><div><br></div><div>   Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><div> I follow the ex15.c, but I don't use DM to organize the solution vector. So I try the SNESSetPicard().</div><div><div style="margin-left:40px">0 SNES Function norm 2.91302e+08 <br>    0 KSP Residual norm 5.79907e+08 <br>    1 KSP Residual norm 1.46843e-05 <br>  Linear solve converged due to CONVERGED_RTOL iterations 1<br>  1 SNES Function norm 2.891e+08 <br>    0 KSP Residual norm 5.5989e+08 <br>    1 KSP Residual norm 4.21314e-06 <br>  Linear solve converged due to CONVERGED_RTOL iterations 1<br>  2 SNES Function norm 2.78289e+08 <br>    0 KSP Residual norm 5.53553e+08 <br>    1 KSP Residual norm 2.04076e-05 <br>  Linear solve converged due to CONVERGED_RTOL iterations 1<br>  3 SNES Function norm 2.77833e+08 <br>    0 KSP Residual norm 5.52907e+08 <br>    1 KSP Residual norm 2.09919e-05 <br>  Linear solve converged due to CONVERGED_RTOL iterations 1<br>  4 SNES Function norm 2.77821e+08 <br>    0 KSP Residual norm 5.52708e+08 <br>    1 KSP Residual norm 2.08677e-05 <br>  Linear solve converged due to CONVERGED_RTOL iterations 1<br>Nonlinear solve did not converge due to DIVERGED_LINE_SEARCH iterations 4<br>SNES Object: 1 MPI processes<br>  type: newtonls<br>  maximum iterations=50, maximum function evaluations=10000<br>  tolerances: relative=1e-08, absolute=1e-50, solution=1e-08<br>  total number of linear solver iterations=5<br>  total number of function evaluations=34<br>  norm schedule ALWAYS<br>  SNESLineSearch Object: 1 MPI processes<br>    type: bt<br>      interpolation: cubic<br>      alpha=1.000000e-04<br>    maxstep=1.000000e+08, minlambda=1.000000e-12<br>    tolerances: relative=1.000000e-08, absolute=1.000000e-15, lambda=1.000000e-08<br>    maximum iterations=40<br>  KSP Object: 1 MPI processes<br>    type: gmres<br>      restart=30, using Classical (unmodified) Gram-Schmidt Orthogonalization with no iterative refinement<br>      happy breakdown tolerance 1e-30<br>    maximum iterations=10000, initial guess is zero<br>    tolerances:  relative=1e-05, absolute=1e-50, divergence=10000.<br>    left preconditioning<br>    using PRECONDITIONED norm type for convergence test<br>  PC Object: 1 MPI processes<br>    type: lu<br>      out-of-place factorization<br>      tolerance for zero pivot 2.22045e-14<br>      matrix ordering: nd<br>      factor fill ratio given 5., needed 5.48356<br>        Factored matrix follows:<br>          Mat Object: 1 MPI processes<br>            type: seqaij<br>            rows=11368, cols=11368<br>            package used to perform factorization: petsc<br>            total: nonzeros=234554, allocated nonzeros=234554<br>            total number of mallocs used during MatSetValues calls =0<br>              not using I-node routines<br>    linear system matrix = precond matrix:<br>    Mat Object: 1 MPI processes<br>      type: seqaij<br>      rows=11368, cols=11368<br>      total: nonzeros=42774, allocated nonzeros=56840<br>      total number of mallocs used during MatSetValues calls =0<br>        not using I-node routines</div>Are there any other examples of Picard methods? I'm very interested in this method.</div><div><br></div><div>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. </div></div></div></blockquote><div><br></div><div>NonlinearGS is really just an optimization. I would start with NASM if you think this will work.</div><div><br></div><div>  Thanks,</div><div><br></div><div>    Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><div>Thanks,</div><div>Yingjie<br></div><div><div style="margin-left:40px"> <br></div><br></div></div></div>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div>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</div><div><br></div><div><a href="http://www.cse.buffalo.edu/~knepley/" target="_blank">https://www.cse.buffalo.edu/~knepley/</a><br></div></div></div></div></div></div></div></div>