<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body style="overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;"><div><br></div><div>   Kevin</div><div><br></div>   A couple of different things are at play here producing the unexpected results.<div><br></div><div>   I have created a merge request <a href="https://gitlab.com/petsc/petsc/-/merge_requests/7179">https://gitlab.com/petsc/petsc/-/merge_requests/7179</a> clarifying why the results obtained from the KSPGetResidualHistory() and KSPGetIterationNumber() can be different in the docs. </div><div><br></div><div>   I also fixed a couple of locations of KSPLogResidual() (in gmres and fgmres) that resulted in extra incorrect logging of the history.</div><div><br></div><div>   In summary, with the "standard" textbook Krylov methods, one expects <span style="font-family: Arial, Helvetica, sans-serif; color: rgb(34, 34, 34);">numIts</span><span style="font-family: Arial, Helvetica, sans-serif; color: rgb(34, 34, 34);"> = nEntries - 1, but this need not be the case for advanced Krylov methods (like those with inner iterations or pipelining) or under exceptional circumstances like the use of CG in trust region methods.</span></div><div><br></div><div>   Barry</div><div><br><div><br><div><div><br><blockquote type="cite"><div>On Jan 11, 2024, at 1:20 PM, Kevin G. Wang <kevinw3@vt.edu> wrote:</div><br class="Apple-interchange-newline"><div><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div class="gmail_default" style="font-family: arial, sans-serif; font-size: small;">Hi Barry,</div><div class="gmail_default" style="font-family: arial, sans-serif; font-size: small;"><br></div><div class="gmail_default" style="font-family: arial, sans-serif; font-size: small;">Thanks for your help!!</div><div class="gmail_default" style="font-family: arial, sans-serif; font-size: small;"><br></div><div class="gmail_default" style="font-family: arial, sans-serif; font-size: small;">I have checked that in KSPSetResidualHistory, "reset" is set to PETSC_TRUE. I did a few quick tests after reading your message. There seems to be some patterns between "numIts" (given by KSPGetIterationNumber) and "nEntries" (given by KSPGetResidualHistory):</div><div class="gmail_default" style="font-family: arial, sans-serif; font-size: small;"><br></div><div class="gmail_default" style="font-family: arial, sans-serif; font-size: small;">1. With gmres or fgmres as the solver:</div><div class="gmail_default" style="font-family: arial, sans-serif; font-size: small;">  - If the number of iterations (until error tolerance is met) is small, like 20 - 30, indeed as you said, <span style="font-family:Arial,Helvetica,sans-serif;color:rgb(34,34,34)">numIts</span><span style="font-family:Arial,Helvetica,sans-serif;color:rgb(34,34,34)"> = nEntries - 1.</span></div><div class="gmail_default" style="font-family: arial, sans-serif; font-size: small;"><span style="font-family:Arial,Helvetica,sans-serif;color:rgb(34,34,34)">  - if the number of iterations is large, this is no longer true. I have a case where nEntries = 372, numIts = 360.</span></div><div class="gmail_default"><span style="color:rgb(34,34,34);font-family:Arial,Helvetica,sans-serif;font-size:small">2. With </span>bcgsl, it looks like numIts = 2*(nEntries - 1).</div><div class="gmail_default">3. With ibcgs, nEntries = 0, while numIts is nonzero.</div><div class="gmail_default"><br></div><div class="gmail_default">In all these tests, I have set the preconditioner to "none".</div><div class="gmail_default"><br></div><div class="gmail_default">My code (where the KSP functions are called) is here: <a href="https://github.com/kevinwgy/m2c/blob/main/LinearSystemSolver.cpp">https://github.com/kevinwgy/m2c/blob/main/LinearSystemSolver.cpp</a></div><div class="gmail_default"><br></div><div class="gmail_default">I am using PETSc 3.12.4.</div><div class="gmail_default"><br></div><div class="gmail_default">Thanks!</div><div class="gmail_default">Kevin</div><div class="gmail_default" style="font-family: arial, sans-serif; font-size: small;"><br></div></div></div></div></div></div></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Jan 11, 2024 at 12:26 PM Barry Smith <<a href="mailto:bsmith@petsc.dev">bsmith@petsc.dev</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><div><br></div>   Trying again.<div><br></div><div>    Normally, numIts would be one less than nEntries since the initial residual is computed (and stored in the history) before any iterations.</div><div><br></div><div>    Is this what you are seeing or are you seeing other values for the two?</div><div><br></div><div>    I've started a run of the PETSc test suite that compares the two values for inconsistencies for all tests to see if I can find any problems.</div><div><br></div><div>    Barry</div><div><br></div><div>    Also note the importance of the reset value in KSPSetResidualHistory() which means the values will not match when reset is PETSC_FALSE.<br id="m_-1872172430401214292lineBreakAtBeginningOfMessage"><div><br><blockquote type="cite"><div>On Jan 10, 2024, at 7:09 PM, Kevin G. Wang <<a href="mailto:kevinw3@vt.edu" target="_blank">kevinw3@vt.edu</a>> wrote:</div><br><div><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div class="gmail_default"><div class="gmail_default" style="font-family:arial,sans-serif;font-size:small">Hello everyone!</div><div class="gmail_default" style="font-family:arial,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,sans-serif;font-size:small">I am writing a code that uses PETSc/KSP to solve linear systems. I just realized that after running "KSPSolve(...)", the number of iterations given by </div><div class="gmail_default" style="font-family:arial,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,sans-serif;font-size:small">KSPGetIterationNumber(ksp, &numIts)</div><div class="gmail_default" style="font-family:arial,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,sans-serif;font-size:small">is *different* from the size of the residual history given by</div><div class="gmail_default" style="font-family:arial,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,sans-serif;font-size:small">KSPGetResidualHistory(ksp, NULL, &nEntries);<br></div><div style="color:rgb(34,34,34);font-family:Arial,Helvetica,sans-serif;font-size:small"><div class="gmail_default" style="font-family:arial,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,sans-serif">That is, "numIts" is not equal to "nEntries". Is this expected, or a bug in my code? (I thought they should be the same...)</div><div class="gmail_default" style="font-family:arial,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,sans-serif">I have tried several pairs of solvers and preconditioners (e.g., fgmres & bjacobi, ibcgs & bjacobi). This issue happens to all of them.</div><div class="gmail_default" style="font-family:arial,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,sans-serif">Thanks!</div><font color="#888888"><div class="gmail_default" style="font-family:arial,sans-serif">Kevin</div></font></div></div><div><br></div><span class="gmail_signature_prefix">-- </span><br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr">Kevin G. Wang, Ph.D.</div><div dir="ltr">Associate Professor</div><div dir="ltr">Kevin T. Crofton Department of Aerospace and Ocean Engineering</div><div dir="ltr">Virginia Tech</div><div dir="ltr">1600 Innovation Dr., VTSS Rm 224H, Blacksburg, VA 24061<br></div><div dir="ltr">Office: (540) 231-7547  |  Mobile: (650) 862-2663 </div><div dir="ltr">URL: <a href="https://www.aoe.vt.edu/people/faculty/wang.html" target="_blank">https://www.aoe.vt.edu/people/faculty/wang.html</a> </div><div>Codes: <a href="https://github.com/kevinwgy" target="_blank">https://github.com/kevinwgy</a></div></div></div></div></div></div></div></div></div></div>
</div></blockquote></div><br></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 dir="ltr"><div dir="ltr"><div dir="ltr">Kevin G. Wang, Ph.D.</div><div dir="ltr">Associate Professor</div><div dir="ltr">Kevin T. Crofton Department of Aerospace and Ocean Engineering</div><div dir="ltr">Virginia Tech</div><div dir="ltr">1600 Innovation Dr., VTSS Rm 224H, Blacksburg, VA 24061<br></div><div dir="ltr">Office: (540) 231-7547  |  Mobile: (650) 862-2663 </div><div dir="ltr">URL: <a href="https://www.aoe.vt.edu/people/faculty/wang.html" target="_blank">https://www.aoe.vt.edu/people/faculty/wang.html</a> </div><div>Codes: <a href="https://github.com/kevinwgy" target="_blank">https://github.com/kevinwgy</a></div></div></div></div></div>
</div></blockquote></div><br></div></div></div></body></html>