xbraid icon indicating copy to clipboard operation
xbraid copied to clipboard

Guarantee bit-wise zero residual when using initial guess from sequential time stepping

Open jbschroder opened this issue 6 years ago • 0 comments

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.

jbschroder avatar Jul 11 '18 21:07 jbschroder