KSP number of iterations different from size of residual array
Hello everyone! 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 KSPGetIterationNumber(ksp, &numIts) is *different* from the size of the residual history given by KSPGetResidualHistory(ksp, NULL, &nEntries); That is, "numIts" is not equal to "nEntries". Is this expected, or a bug in my code? (I thought they should be the same...) I have tried several pairs of solvers and preconditioners (e.g., fgmres & bjacobi, ibcgs & bjacobi). This issue happens to all of them. Thanks! Kevin -- Kevin G. Wang, Ph.D. Associate Professor Kevin T. Crofton Department of Aerospace and Ocean Engineering Virginia Tech 1600 Innovation Dr., VTSS Rm 224H, Blacksburg, VA 24061 Office: (540) 231-7547 | Mobile: (650) 862-2663 URL: https://www.aoe.vt.edu/people/faculty/wang.html Codes: https://github.com/kevinwgy
Kevin, The manual page is misleading. It actually returns the total length of the history as set by KSPSetResidualHistory(), not the number of iterations. Barry
On Jan 10, 2024, at 7:09 PM, Kevin G. Wang <[email protected]> wrote:
Hello everyone!
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
KSPGetIterationNumber(ksp, &numIts)
is *different* from the size of the residual history given by
KSPGetResidualHistory(ksp, NULL, &nEntries);
That is, "numIts" is not equal to "nEntries". Is this expected, or a bug in my code? (I thought they should be the same...)
I have tried several pairs of solvers and preconditioners (e.g., fgmres & bjacobi, ibcgs & bjacobi). This issue happens to all of them.
Thanks! Kevin
-- Kevin G. Wang, Ph.D. Associate Professor Kevin T. Crofton Department of Aerospace and Ocean Engineering Virginia Tech 1600 Innovation Dr., VTSS Rm 224H, Blacksburg, VA 24061 Office: (540) 231-7547 | Mobile: (650) 862-2663 URL: https://www.aoe.vt.edu/people/faculty/wang.html Codes: https://github.com/kevinwgy
Sorry, sent the message too quickly. What I said below is incorrect. Barry
On Jan 10, 2024, at 8:30 PM, Barry Smith <[email protected]> wrote:
Kevin,
The manual page is misleading. It actually returns the total length of the history as set by KSPSetResidualHistory(), not the number of iterations.
Barry
On Jan 10, 2024, at 7:09 PM, Kevin G. Wang <[email protected]> wrote:
Hello everyone!
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
KSPGetIterationNumber(ksp, &numIts)
is *different* from the size of the residual history given by
KSPGetResidualHistory(ksp, NULL, &nEntries);
That is, "numIts" is not equal to "nEntries". Is this expected, or a bug in my code? (I thought they should be the same...)
I have tried several pairs of solvers and preconditioners (e.g., fgmres & bjacobi, ibcgs & bjacobi). This issue happens to all of them.
Thanks! Kevin
-- Kevin G. Wang, Ph.D. Associate Professor Kevin T. Crofton Department of Aerospace and Ocean Engineering Virginia Tech 1600 Innovation Dr., VTSS Rm 224H, Blacksburg, VA 24061 Office: (540) 231-7547 | Mobile: (650) 862-2663 URL: https://www.aoe.vt.edu/people/faculty/wang.html Codes: https://github.com/kevinwgy
Trying again. Normally, numIts would be one less than nEntries since the initial residual is computed (and stored in the history) before any iterations. Is this what you are seeing or are you seeing other values for the two? 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. Barry Also note the importance of the reset value in KSPSetResidualHistory() which means the values will not match when reset is PETSC_FALSE.
On Jan 10, 2024, at 7:09 PM, Kevin G. Wang <[email protected]> wrote:
Hello everyone!
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
KSPGetIterationNumber(ksp, &numIts)
is *different* from the size of the residual history given by
KSPGetResidualHistory(ksp, NULL, &nEntries);
That is, "numIts" is not equal to "nEntries". Is this expected, or a bug in my code? (I thought they should be the same...)
I have tried several pairs of solvers and preconditioners (e.g., fgmres & bjacobi, ibcgs & bjacobi). This issue happens to all of them.
Thanks! Kevin
-- Kevin G. Wang, Ph.D. Associate Professor Kevin T. Crofton Department of Aerospace and Ocean Engineering Virginia Tech 1600 Innovation Dr., VTSS Rm 224H, Blacksburg, VA 24061 Office: (540) 231-7547 | Mobile: (650) 862-2663 URL: https://www.aoe.vt.edu/people/faculty/wang.html Codes: https://github.com/kevinwgy
participants (2)
-
Barry Smith -
Kevin G. Wang