<div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr">Hi all,<div><br></div><div>Suppose I have a 2x2 block system of equations that I want to solve using gmres + field split:</div><div><br></div><div>(A00 A01) (u0) = (b0)</div><div>(A10 A11) (u1) = (b1)</div><div><br></div><div>Based on what I understand from the PCApply_FieldSplit(pc,x,y) <a href="https://bitbucket.org/petsc/petsc/src/3b49ee3ec70d6dde98134df8f402aa75075296ac/src/ksp/pc/impls/fieldsplit/fieldsplit.c#lines-1194">source code</a>, the Block Jacobi (aka pc_fieldsplit_type additive) implementation performs the following operations:<br></div><div><br></div><div>y0 = inv(A00)*x0</div><div>y1 = inv(A11)*x1</div><div><br></div><div>and for the Block Gauss Seidel (aka pc_fieldsplit_type multiplicative) </div><div><br></div><div><div>y0 = inv(A00)*x0</div><div>y1 = inv(A11)*(x1 - A10*y0)</div></div><div><br></div><div>But based on my understanding of the <a href="https://en.wikipedia.org/wiki/Jacobi_method">Jacobi</a> and <a href="https://en.wikipedia.org/wiki/Gauss–Seidel_method">Gauss-Seidel</a> methods, shouldn't the above sets of operations be more like:</div><div><br></div><div><div>y0 = inv(A00)*(x0 - A01*y1_0)</div><div>y1 = inv(A11)*(x1 - A10*y0_0)</div></div><div><br></div><div>and</div><div><br></div><div><div>y0 = inv(A00)*(x0 - A01*y1_0)</div><div>y1 = inv(A11)*(x1 - A10*y0)</div></div><div><br></div><div>where y0_0 and y1_0 denote the initial/previous values of y0 and y1, respectively? Or does it not matter as much because x0 and x1 don't exactly correspond to u0 and u1, respectively, but instead correspond to either b - A*u or A*vec_vv depending on the stage you're in inside the gmres solver?</div><div><br></div><div>Thanks,</div><div>Justin</div></div></div></div></div>