<div dir="ltr"><div dir="ltr">On Tue, Nov 14, 2023 at 3:59 PM Rene Chenard via petsc-users <<a href="mailto:petsc-users@mcs.anl.gov">petsc-users@mcs.anl.gov</a>> wrote:<br></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><div><div>Dear PETSc Developers,</div><div><br></div><div>I hope this message finds you well. My name is René Chenard, and I am a Research Professional at Université Laval. We are currently working on implementing a wrapper for the SNES in our project and are seeking guidance on incorporating callbacks at different stages of the resolution process.</div><div><br></div><div>Specifically, our objective is to implement a callback that triggers at the initiation of every nonlinear iteration and another that activates at the conclusion of each nonlinear iteration. In our exploration, we discovered the potential use of SNESSetUpdate and SNESSetConvergenceTest for this purpose.</div><div><br></div><div>However, we encountered a challenge with SNESSetUpdate, as it seems to be ineffective for the ngmres and anderson solver types, the latter of which appears to be based on the implementation of ngmres. We are reaching out to seek clarification on whether this behavior is intentional and to explore alternative approaches that might better suit our needs.</div><div><br></div><div>To facilitate a clearer understanding of our observations, we have prepared a reproduction example in the file named test_snes.c. This file outlines the specific scenarios where we encountered challenges with SNESSetUpdate and provides a context for our inquiries.</div><div><br></div><div>Here are our specific questions:</div><div><br></div><div>1. Is SNESSetUpdate designed to function uniformly across all types of SNES solvers?</div></div></div></blockquote><div><br></div><div>Yes, this is our bug in NGMRES. It is fine if you make an MR for this, or we can do it.</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><div><div>2. What would be the recommended approach to implement custom callbacks around every nonlinear iteration, especially considering the apparent limitations with SNESSetUpdate for certain solver types?</div></div></div></blockquote><div><br></div><div>That is the right way, we just need to fix NGMRES.</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><div><div>3. We observed a discrepancy in the iteration/step numbering between the update function (set by SNESSetUpdate) and the convergence function (set by SNESSetConvergenceTest). Could you provide clarification on this, considering the documentation's description of SNESSetUpdate as the function "called at the beginning of every iteration of the nonlinear solve"?</div></div></div></blockquote><div><br></div><div>Update is designed to be called at each iteration. The convergence test could possibly be called more than that (I think). For example, during line search you might call the convergence test to decide whether to keep searching.</div><div><br></div><div>What do you want to do at the end of each iterate?</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><div><div>We genuinely appreciate your expertise in this matter, and your insights will be invaluable in guiding our implementation. Thank you in advance for your consideration and support.</div><div><br></div><div>Warm regards,</div><div><br></div><div>—René Chenard</div><div>Research Professional at Université Laval</div><div><a href="mailto:rene.chenard.1@ulaval.ca" target="_blank">rene.chenard.1@ulaval.ca</a></div></div><div><br></div></div><div></div></blockquote></div><br clear="all"><div><br></div><span class="gmail_signature_prefix">-- </span><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>