xbraid
xbraid copied to clipboard
Guarantee bit-wise zero residual when using initial guess from sequential time stepping
We would like an option to guarantee bit-wise exactly zero Braid residuals (over multiple Braid iterations), when Braid is initialized with the solution from sequential time stepping. This is a useful debugging test, in that if zero residuals in Braid are not maintained over multiple Braid iterations, then a bug is present. We don't think this is guaranteed right now, but if the following was added to the storage=-2 option, we believe it would be true.
The FAS coarse grid is
A_c(u_c) = R(f - A(u)) + A_c(R(u))
-> R() is restriction -> f - A(u) should be, unless there's a bug -> A_c(R(u)) = -step(u_{i-1}) + u_i
Now assume that we solve the coarse-grid equation exactly, as in a two-grid method. Then the solution at equation i is
-step( u_{c,i-1} ) + u_{c,i} = -step(u_{i-1}) + u_i
Right now, the right-hand-side is summed, and then step( u_{c,i-1} ) is added to the right-hand-side to yield
u_{c,i} = u_i.
If there are any precision errors during the above two summing steps, then you lose one or two bits of precision. However if extra storage where added so that -step(u_{i-1}) on the right-hand-side were kept in its only container, then it could be summed against step( u_{c,i-1} ) so that they cancel out to exactly 0, leaving the only nonzero quantity on the right-hand-side being u_i.
This would be useful.