I have a Hermitian matrix $A$ that satisfies some symmetries which I can express via $AS = SA$ for a unitary matrix $S$. Now I am interested in the eigenvectors of $A$, but I want that these eigenvectors also respect my symmetries ( compare to Bloch waves in physics where the eigenvectors are chosen to reflect the translational invariance of the lattice).
Since $A$ has degenerate (repeated) eigenvalues, the standard numerical techniques will return some arbitrary (yet orthonormal) eigenvectors spanning the eigenspace. I, however, want to obtain unique results and thus want to make use of the symmetries. How can I do this numerically? I know that commuting matrices can be diagonalized simultaneously - in theory. But I don't know how to do it practically. Would I have to diagonalize one of them, apply the unitary transform thus obtained to the other one, arriving at a block diagonal form where I then have to diagonalize each block separately? Or is there something more elegant I can do?
EDIT: The matrix is dense, but quite small (12x12 to 18x18).
The symmetry would be something like translation symmetry:
$$\begin{pmatrix} 0 & 0 & 0 & -1 \\ 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \end{pmatrix}$$
where each entry is a 3x3-block in the case of a $12 \times 12$ matrix, which looks something like
$$\begin{pmatrix} a & b & 0 & -b\\ b&a&b&0\\ 0&b&a&b\\ -b&0&b&a\end{pmatrix}$$