<div dir="ltr">Dear PETSc --<div><br></div><div>In my humble opinion, the answers to the following rather basic questions are missing from the petsc users manual.  At least in part, I am not certain what the answers are.</div><div><br></div><div><br></div><div>Question 1:   What formula does the preconditioned Richardson iteration (-ksp_type richardson -pc_type X) satisfy and where does the scale (-ksp_richardson_scale alpha) go?</div><div><br></div><div>Answer?:  In the left-preconditioned form I would guess it is</div><div><br></div><div>(*)         x_{k+1} = x_k + alpha M_L^{-1} (b - A x_k),</div><div><br></div><div>where M_L is the matrix implied by -pc_type X.  If so this makes option combination<div><br></div><div>-ksp_type richardson -pc_type jacobi [-ksp_richardson_scale 1]<br></div><div><br></div><div>into the classical Jacobi iteration</div><div><br></div><div>x_{k+1} = x_k + D^{-1} (b - A x_k) = D^{-1} (b - (L+U)x_k)</div><div><br></div><div>where A = D+L+U and D is the diagonal of A.</div><div><br></div><div>I am pretty sure this answer is right, but equation (*) should probably be somewhere in the manual!</div><div><br></div><div><br></div><div>Question 2.  What formula is the (non-symmetric) SOR satisfying, and where do the constants -pc_sor_omega and -pc_sor_diagonal_shift delta go?</div><div><br></div><div>Answer?:  My understanding is first that the classical Jacobi, Gauss-Seidel, and SOR iterations are all regarded by PETSc developers as left-preconditioned Richardson iterations, so names "jacobi" and "sor" describe PC objects and these classical iterations are all KSP type "richardson".  That is, they are all instances of (*).</div><div><br></div><div>(RANT:  There is no clear statement of this excellent philosophy in the users manual, and it would help a lot of students of PETSc!  While some references share it, reading standard literature, including relevant wiki pages, is not healthful on this topic.  Because the literature does not necessarily parallel PETSc thinking, it requires constant mental translation.  This is bad when it comes to setting parameters at runtime!)</div><div><br></div><div>Supposing the above philosophy, and that A = D+L+U with the usual meanings, then I guess SOR is<br></div><div><br></div><div>(**)    x_{k+1} = x_k + alpha (omega^{-1} (D+delta) + L)^{-1} (b - A x_k),</div><div><br></div><div>In case alpha=1, omega=1, delta=0 then (**) becomes Gauss-Seidel:</div><div><br></div><div>-ksp_type richardson -pc_type sor [-ksp_richardson_scale 1 -pc_sor_omega 1 -pc_sor_diagonal_shift 0]</div><div><br></div><div>Especially because it involves three user-controlled constants, equation (**) could usefully be stated somewhere in the manual ... supposing it is correct.</div><div><br></div><div><br></div><div>Question 3.  What is the probability that a PETSc developer will address the above two questions by telling me that classical iterations are lame?</div><div><br></div><div>Answer:  Not the point!  These iterations are used blockwise (e.g. ASM) and as smoothers in many proper PETSc applications.  Clarity is helpful!</div><div><br></div><div><br></div><div>Thanks for the great tool, as usual!</div><div><br></div><div>Ed</div><div><br></div><div><br></div>-- <br><div class="m_-1535398121508037435gmail-m_5440239499410016796m_6751049666186763378gmail_signature">Ed Bueler<br>Dept of Math and Stat and Geophysical Institute<br>University of Alaska Fairbanks<br>Fairbanks, AK 99775-6660<br>301C Chapman and 410D Elvey<br><a href="tel:(907)%20474-7693" value="+19074747693" target="_blank">907 474-7693</a> and <a href="tel:(907)%20474-7199" value="+19074747199" target="_blank">907 474-7199</a>  (fax <a href="tel:(907)%20474-5394" value="+19074745394" target="_blank">907 474-5394</a>)</div>
</div></div>