add_coupling in SpinModel
Posted: 06 May 2019, 13:02
I am not sure how the add_couplings in ``models/spins.py`` are constructed (for the Jx and Jy terms).
When I use the substitutions \(S^\pm=S^x \pm \mathrm{i} S^y\), I get:
\(J_x S^x_i S^x_j + J_y S^y_i S^y_j = \left( \frac{J_x + J_y}{4} \right)(S^+_i S^-_j + S^-_i S^+_j) + \left( \frac{J_x - J_y}{4} \right)(S^+_i S^+_j + S^-_i S^-_j) \)
Writing this with Hermitian conjugates, I get:
\(J_x S^x_i S^x_j + J_y S^y_i S^y_j = \left( \frac{J_x + J_y}{4} \right)(S^+_i S^-_j + (S^+_j S^-_i)^\dagger) + \left( \frac{J_x - J_y}{4} \right)(S^+_i S^+_j + (S^+_j S^+_i)^\dagger) \)
I do not see how this corresponds to the couplings:
Specifically, I don't see how the two h.c. couplings are compatible with each other. Presuming the first h.c. coupling is correct, shouldn't the second one read:
?
Any clarification as to how to properly construct the h.c. coupling would be much appreciated Also for the cases where one has compound operators on both sides, such as:
...where 1 and 2 are labels e.g. for a GroupedSite.
When I use the substitutions \(S^\pm=S^x \pm \mathrm{i} S^y\), I get:
\(J_x S^x_i S^x_j + J_y S^y_i S^y_j = \left( \frac{J_x + J_y}{4} \right)(S^+_i S^-_j + S^-_i S^+_j) + \left( \frac{J_x - J_y}{4} \right)(S^+_i S^+_j + S^-_i S^-_j) \)
Writing this with Hermitian conjugates, I get:
\(J_x S^x_i S^x_j + J_y S^y_i S^y_j = \left( \frac{J_x + J_y}{4} \right)(S^+_i S^-_j + (S^+_j S^-_i)^\dagger) + \left( \frac{J_x - J_y}{4} \right)(S^+_i S^+_j + (S^+_j S^+_i)^\dagger) \)
I do not see how this corresponds to the couplings:
Code: Select all
# Sp = Sx + i Sy, Sm = Sx - i Sy, Sx = (Sp+Sm)/2, Sy = (Sp-Sm)/2i
# Sx.Sx = 0.25 ( Sp.Sm + Sm.Sp + Sp.Sp + Sm.Sm )
# Sy.Sy = 0.25 ( Sp.Sm + Sm.Sp - Sp.Sp - Sm.Sm )
for u1, u2, dx in self.lat.nearest_neighbors:
self.add_coupling((Jx + Jy) / 4., u1, 'Sp', u2, 'Sm', dx)
self.add_coupling(np.conj((Jx + Jy) / 4.), u2, 'Sp', u1, 'Sm', -dx) # h.c.
self.add_coupling((Jx - Jy) / 4., u1, 'Sp', u2, 'Sp', dx)
self.add_coupling(np.conj((Jx - Jy) / 4.), u2, 'Sm', u1, 'Sm', -dx) # h.c.
Code: Select all
self.add_coupling(np.conj((Jx - Jy) / 4.), u2, 'Sp', u1, 'Sp', -dx) # h.c.
Any clarification as to how to properly construct the h.c. coupling would be much appreciated Also for the cases where one has compound operators on both sides, such as:
Code: Select all
self.add_coupling(J, u1, 'Sp1 Sm1', u2, 'Sp2 Sm2', -dx)