D_4 Symmmetry
The Lattice has \(D_4\) symmetry, the symmetry of the set of points in the finite-volume Brillouin zone.
\(D_4\) has 8 elements (the identity \(E\), 3 nontrivial rotations \(2C_4(z)\) and \(C_2(z)\), 2 edge \(2C'_2\) and 2 vertex \(2C''_2\) reflections).
There are five irreducible representations; the character table is show below.
\(D_4\) |
\(E\) |
\(2C_4(z)\) |
\(C_2(z)\) |
\(2C'_2\) |
\(2C''_2\) |
|---|---|---|---|---|---|
\(A_1\) |
+1 |
+1 |
+1 |
+1 |
+1 |
\(A_2\) |
+1 |
+1 |
+1 |
-1 |
-1 |
\(B_1\) |
+1 |
-1 |
+1 |
+1 |
-1 |
\(B_2\) |
+1 |
-1 |
+1 |
-1 |
+1 |
\(E\) |
+2 |
0 |
-2 |
0 |
0 |
The irreducible multiplication table is
\(\otimes\) |
\(A_1\) |
\(A_2\) |
\(B_1\) |
\(B_2\) |
\(E\) |
\(A_1\) |
\(A_1\) |
\(A_2\) |
\(B_1\) |
\(B_2\) |
\(E\) |
\(A_2\) |
\(A_2\) |
\(A_1\) |
\(B_2\) |
\(B_1\) |
\(E\) |
\(B_1\) |
\(B_1\) |
\(B_2\) |
\(A_1\) |
\(A_2\) |
\(E\) |
\(B_2\) |
\(B_2\) |
\(B_1\) |
\(A_2\) |
\(A_1\) |
\(E\) |
\(E\) |
\(E\) |
\(E\) |
\(E\) |
\(E\) |
\(A_1 \oplus A_2 \oplus B_1 \oplus B_2\) |
The representation on both the lattice points and the Brillouin zone (also a space of 2D vectors), is an \(E\) irreducible representation
and one complete set of generators is given by the first generators of \(2C_4(z)\) (rotation by +π/2) and \(2C'_2\) (reflection across the x-axis).
Angular Momentum Analog
All of the irreducible representations are one-dimensional except \(E\), in which case we can distinguish the rows of the irrep by eigenvalues of generators. Since for \(D_4\) no two generators are simultaneously diagonalizable, we just pick the first matrix in \(2C_4(z)\), a rotation matrix. Its eigenvalues are \(\pm i\). But these are group elements; usually we think of the z-projection of angular momentum quantum numbers as eigenvalues of Lie algebra elements.
Even though \(D_4\) is a finite group, we can still write the elements of \(2C_4(z)\) as exponentials of matrices. In fact,
and the eigenvalues of \(\sigma_2\) are ±1, which are the values we prefer to label the rows of \(E\) irreps. We write the phase suggestively to remind ourselves that the period of this group element is 4; the ‘angular momentum’ is \((\text{mod } 4)\).
Continuing the analogy, the \(A\) irreps have ‘angular momentum’ 0 and \(B\) irreps have ‘angular momentum’ +2 [which is the same as -2 (mod 4)]. The additivity of this ‘angular momentum’ is one way to see that \(E \otimes E\) has to yield two \(A\) representations and two \(B\) representations.
Orbits
Given a set \(X\) acted on by a group \(G\), the orbit of a point \(x\) is the set \(\{gx | g \in G\}\). Orbits are equivalence classes, since the group is closed under multiplication.
Consider the orbits of the two-dimensional integer lattice under \(D_4\). The orbits fall into a small set of cases.
\((0,0)\) which is fixed under all the group operations; its orbit is just itself, a singleton.
\((a,0)\) which has an orbit of size 4, \(\{(a,0),(0,a),(-a,0),(0,-a)\}\).
\((a,a)\) which also has an orbit of size 4, \(\{(a,a),(-a,a),(-a,-a),(a,-a)\}\).
\((a,b)\) which has an orbit of size 8, \(\{(a,b),(b,a),(-b,a),(-a,b),(-a,-b),(-b,-a),(b,-a),(a,-b)\}\).
for any integers \(a>b>0\). All the points in an orbit have the same magnitude, but vectors with the same magnitude may be in different orbits, such as \((3,4)\) and \((0,5)\).
Each element of \(G\) induces a permutation on an orbit; thinking of an orbit as a vector space that group element is represented by a permutation matrix,
The set of permutation matrices is (typically) reducible. Decomposing these matrices into their irreducible representations requires a single unitary transformation that simultaneously block-diagonalizes the group generators. We can pick one generator to be diagonalized; as discussed above we pick the rotational generator.
For one-dimensional irreps we can identify them by the pair of generator eigenvalues; we know each two-dimensional irrep is \(E\) and we can identify the row of the irrep from the eigenvalue.
Let us perform this decomposition now.
Because the \((0,0)\) orbit is a singleton, every permutation matrix is just the 1×1 identity “matrix”, and the generator eigenvalues are both 1, so
We put the equivalence class orbit label as a superscript, as a reminder.
For orbits of type \((a,0)\) the induced permutation matrices are
which are block-diagonalized by moving to the basis
and the labels of the states on the left were fixed by the block-diagonalized generators \(U g U^\dagger\).
For the orbits of type \((a,a)\) the induced permutation matrices are
which are block-diagonalized by moving to the basis
Note that even though the unitary transformation is the same, the type of \(B\) irrep differs between the \((a,0)\) and \((a,a)\) orbits.
Finally, for the orbits of type \((a,b)\) the induced permutation matrices are
which are block-diagonalized by moving to the basis
The \(A_2\) irrep only appears in the orbits of size 8.
Lattice Interactions
The LegoSphere is one example of a lattice-native interaction which by construction transforms in a definite way under the \(D_4\) point symmetry.
To construct a translationally-invariant two-body interaction we can restrict \(V_{x,x+r} = V_{0, r}\) and study the relative-coordinate \(r\) dependence.
The set of relative coordinates is a two-dimensional integer lattice, and therefore we can leverage our knowledge about eigenfunctions on orbits to construct potentials in definite irreducible representations.
For a fixed radius \(R\) we construct the potential of strength \(C\)
where \(gR\) are the elements of its orbit, \(U^{R}_{\Lambda,gR}\) the unitary transformation from the orbit to the eigenbasis, and \(\Lambda\) labels the irrep (and row, if needed). An arbitrary potential on the orbit of \(R\) can be constructed in this way because the eigenbasis is complete; a completely arbitrary lattice interaction can be constructed by summing contributions from different radii.
One trivial example is the contact interaction where the whole sphere is the singleton \((0,0)\), and the interaction is proportional to \(\delta_{r,0}\).
In this language, a LegoSphere is an \(A_1\) interaction.
Higher-body interactions are more complicated because they need not depend on only one coordinate. A three-body interaction could depend on two relative coordinates, for example. Then, the permutation matrices are induced by the action of the group generators on orbits of pairs of coordinate pairs; the algebra quickly becomes unpleasant. However, the reduction into irreps proceeds in the same conceptual way.
Momentum Shells
Given a generic momentum vector \(\vec{p}\), the corresponding momentum shell is the set of vectors in the image \(g\vec{p}\). Note that because the edges of the BZ are identified, some points have no ‘obvious’ partner; they might map to themselves under a nontrivial operation.
Symmetrization Utilities
Warning
What we currently have is extremely ad-hoc and not general. Therefore this entire API may change in the future!
- class tdg.symmetry.D4(Lattice)[source]
The D4 symmetry has an A1 representation that’s “like the S-wave” in that it’s rotationally symmetric.
For functions of a relative coordinate (or of a total momentum), we can take a straight average over the whole group orbit of every point on the lattice (or Brillouin zone).
For other irreps we need a weighted average.
- Parameters
Lattice (tdg.Lattice) – Used to construct the permutations that represent the group elements.
#!/usr/bin/env python import torch import tdg, tdg.symmetry import matplotlib.pyplot as plt fig, ax = plt.subplots(4,4, figsize=(10,12)) L = tdg.Lattice(9) random = torch.rand(L.sites) symmetry = tdg.symmetry.D4(L) L.plot_2d_scalar(ax[0,0], random) [a.remove() for a in ax[0,1:]] for a, irrep in zip(ax[1], ('A1', 'A2', 'B1', 'B2')): L.plot_2d_scalar(a, symmetry(random, irrep).real) a.set_title(irrep) for real, imag, irrep in zip(ax[2], ax[3], (("E", +1), ("E", -1), ("E'", +1), ("E'", -1))): L.plot_2d_scalar(real, symmetry(random, irrep).real) L.plot_2d_scalar(imag, symmetry(random, irrep).imag) real.set_title(irrep) ax[2,0].set_ylabel('real') ax[3,0].set_ylabel('imag') fig.tight_layout() plt.show()
(
Source code,png,hires.png,pdf)
- __call__(data, irrep='A1', conjugate=False, axis=-1)[source]
- Parameters
data (torch.tensor) – Data whose axis should be symmetrized.
irrep (one of .irreps) – The irrep to project to.
conjugate (True or False) – The weights are conjugated, which only affects the E representations.
axis (int) – The linearized index on which to act.
- Return type
A complex-valued torch.tensor of the same shape as data, but with the axis projected to the requested irrep.