<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div class=""><br class=""></div>  To provide the functions to the Picard iteration you call SNESSetPicard() not SNESSetFunction() and SNESSetJacobian(), you provide code to compute A(x) and b(x).<div class=""><br class=""></div><div class="">  Note that in the Picard iteration the matrix A(x) is NOT the Jacobian of  F(x) = A(x) x - b(x). The Jacobian of F(x) is the more complicated F'(x) = A(x) + A'(x)x + b'(x) </div><div class=""><br class=""></div><div class="">  Barry</div><div class=""><br class=""><div><br class=""><blockquote type="cite" class=""><div class="">On Oct 9, 2020, at 6:38 AM, Matthew Knepley <<a href="mailto:knepley@gmail.com" class="">knepley@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class=""><div dir="ltr" class="">On Fri, Oct 9, 2020 at 4:53 AM baikadi pranay <<a href="mailto:pranayreddy865@gmail.com" class="">pranayreddy865@gmail.com</a>> wrote:<br class=""></div><div class="gmail_quote"><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" class=""><div dir="ltr" class="">Hello,<br class="">I have a couple of questions regarding how SNESSetFunction,SNESSetJacobian and SNESSolve work together. I am trying to solve a nonlinear system of the form A(x)x=b(x). I am using Fortran90. The way I intend to solve the above equation is as follows:<br class="">Step 1: initialize x with an initial guess</div><div class="">Step 2: Solve using SNESSolve for (x^i, i is the iteration number, i=1,2,3...)</div><div class="">Step 3: Calculate the update and check if it is less than tolerance</div><div class="">Step 4: If yes, end the loop. Else the jacobian matrix and function should be updated using x^(i) and go back to step 2.<br class=""></div></div></blockquote><div class=""><br class=""></div><div class="">You are describing the Picard iteration:</div><div class=""><br class=""></div><div class="">  <a href="https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/SNES/SNESSetPicard.html" class="">https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/SNES/SNESSetPicard.html</a></div><div class=""><br class=""></div><div class="">You can do this, but it will converge more slowly than Newton. We usually advise using Newton.</div><div class=""> </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" class=""><div class="">The part which is a little confusing to me is in understanding how to update the jacobian matrix and the function F (= A(x)x-b(x)). <br class=""><br class="">1) Should I explicitly call the subroutines Form Function and FormJacobian by using x^i as the input argument or is this automatically taken care of when I go back to step 2 and call SNESSolve?<br class=""></div></div></blockquote><div class=""><br class=""></div><div class="">No. SNES calls these automatically.</div><div class=""><br class=""></div><div class="">  Thanks,</div><div class=""><br class=""></div><div class="">     Matt</div><div class=""> </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" class=""><div class="">2) If the answer to the above question is yes, I do not fully understand the role played by the functions SNESSetFunction and SNESSetJacobian.<br class=""><br class="">I apologize if I am not clear in my explanation. I would be glad to elaborate on any section of my question. Please let me know if you need any further information from my side.<br class=""><br class="">Thank you,<br class="">Sincerely,<br class="">Pranay.</div></div><div hspace="streak-pt-mark" style="max-height:1px" class=""><img alt="" style="width: 0px; max-height: 0px; overflow: hidden;" src="https://mailfoogae.appspot.com/t?sender=acHJhbmF5cmVkZHk4NjVAZ21haWwuY29t&type=zerocontent&guid=af74088e-1b2d-4959-a8dc-d23913da4f3e" class=""><font color="#ffffff" size="1" class="">ᐧ</font></div>
</blockquote></div><br clear="all" class=""><div class=""><br class=""></div>-- <br class=""><div dir="ltr" class="gmail_signature"><div dir="ltr" class=""><div class=""><div dir="ltr" class=""><div class=""><div dir="ltr" class=""><div class="">What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br class="">-- Norbert Wiener</div><div class=""><br class=""></div><div class=""><a href="http://www.cse.buffalo.edu/~knepley/" target="_blank" class="">https://www.cse.buffalo.edu/~knepley/</a><br class=""></div></div></div></div></div></div></div></div>
</div></blockquote></div><br class=""></div></body></html>