In feature/multigrid, the current logic for determining if you need to do bi-directional coarsening is if the previous level is preconditioned. This is true in every practical use case for Wilson-Clover, but it isn't strictly true: you need to do bi-directional coarsening if any previous operator was preconditioned, because once that's the case you've broken the Hermitian conjugate symmetry between forward and backward links. This is relevant with, for example, staggered MG, where so far we've found not preconditioning the lower levels leads to a better algorithm.
The relevant boolean bidirectional_links is defined in the function calculateY at the bottom of the file coarse_op.cuh.
Since this isn't an issue for any practical use case for Wilson-Clover, it's low priority. This is mostly a note for myself to take care of this in the future.
In feature/multigrid, the current logic for determining if you need to do bi-directional coarsening is if the previous level is preconditioned. This is true in every practical use case for Wilson-Clover, but it isn't strictly true: you need to do bi-directional coarsening if any previous operator was preconditioned, because once that's the case you've broken the Hermitian conjugate symmetry between forward and backward links. This is relevant with, for example, staggered MG, where so far we've found not preconditioning the lower levels leads to a better algorithm.
The relevant boolean
bidirectional_links
is defined in the functioncalculateY
at the bottom of the filecoarse_op.cuh
.Since this isn't an issue for any practical use case for Wilson-Clover, it's low priority. This is mostly a note for myself to take care of this in the future.