While debugging #44 I noticed that we have a rather nasty bug in our ghost row exchange: When exchanging the c_ij matrix via SparseMatrixSIMD::update_ghost_rows() we end up with an incorrect vector-valued matrix entry.
This is hard to spot because (a) scalar, non vector-valued matrices are exchanged correctly; (b) we never used the "ghost row" range of the c_ij matrix for symmetrizing d_ij due to another bug fixed by #43. But now we do.
Example: when symmetrizing d_ij I encounter the following:
One can see the c_ji matrix entry on rank 1 is wrong. It had been incorrectly imported from a vectorized range on rank0 to a serial non-vectorized range on rank1.
While debugging #44 I noticed that we have a rather nasty bug in our ghost row exchange: When exchanging the
c_ij
matrix viaSparseMatrixSIMD::update_ghost_rows()
we end up with an incorrect vector-valued matrix entry.This is hard to spot because (a) scalar, non vector-valued matrices are exchanged correctly; (b) we never used the "ghost row" range of the
c_ij
matrix for symmetrizingd_ij
due to another bug fixed by #43. But now we do.Example: when symmetrizing
d_ij
I encounter the following:One can see the
c_ji
matrix entry on rank 1 is wrong. It had been incorrectly imported from a vectorized range on rank0 to a serial non-vectorized range on rank1.Looking at the exchange code in question: https://github.com/conservation-laws/ryujin/blob/development/source/sparse_matrix_simd.h#L592-L631 we do not slice correctly.