## Charge Info for Z3 symmetry in 3-state Potts Model

How do I use this algorithm? What does that parameter do?
nsherman
Posts: 10
Joined: 21 Apr 2021, 00:16

### Charge Info for Z3 symmetry in 3-state Potts Model

Hi,

I'm trying to implement the 3-state Potts Model, with Hamiltonian

H = $$\sum_i \Omega^{\dagger}_i\Omega_{i+1} + \Omega_i\Omega^{\dagger}_{i+1} + \sum_i [\Gamma_i^{(1)} + \Gamma_i^{(2)}]$$
with
$$\Omega_i = diag(1, e^{i2\pi/3}, e^{-i2\pi/3})$$
And $$\Gamma_i^{(1)}$$ is a cyclic permutation of the 3 basis states, and $$\Gamma_i^{(2)}$$ is the other cyclic permutation (not sure how to make matrices in HTML, hopefully what I'm saying is clear.)

This model has a $$\mathbb{Z}_3$$ symmetry generated by $$\Gamma_i^{(1)}$$, this is the generalization of the TFIM which has a $$\mathbb{Z}_2$$ symmetry.

I'm confused on how to properly implement the charge conservation for this $$\mathbb{Z}_3$$ symmetry. I don't fully understand the charge conservation idea in TeNPy. I defined a class

Code: Select all

class PottsSite(Site):

def __init__(self, conserve='Z3'):
if not conserve:
conserve = 'None'
if conserve not in ['None','Z3']:
raise ValueError("invalid conserve: " + repr(conserve))

qcharges = np.array([0,1,2])
Omega = [[1,0,0],[0,np.exp(1j*2*np.pi/3),0],[0,0,np.exp(-1j*2*np.pi/3)]]
Gamma1 = [[0,1,0],[0,0,1],[1,0,0]]
Gamma2 = [[0,0,1],[1,0,0],[0,1,0]]
if conserve == 'Z3':
chinfo = npc.ChargeInfo([3], ['Z3_potts'])
leg = npc.LegCharge.from_qflat(chinfo, np.array(qcharges, dtype=np.int64))
else:
leg = npc.LegCharge.from_trivial(d)
self.conserve = conserve
names = [str(i) for i in range(3)]
Site.__init__(self, leg, names, **ops)
When I use this to implement the above Hamiltonian, I get the error

Code: Select all

ValueError: Arrays can't have different qtotal!
I think it's because of how I defined qcharges possibly? As I said, I don't fully understand the charge conservation aspect, so any guidance would be appreciated.

Best,
Nick
Johannes
Posts: 337
Joined: 21 Jul 2018, 12:52
Location: TU Munich

### Re: Charge Info for Z3 symmetry in 3-state Potts Model

TeNPy tries to preserve local, diagonal symmetries, in your case the Z3 symmetry $$(\sum_i Q_i \mod 3)$$ where $$Q_i = diag(0, 1, 2)$$ are the charge values you define. However, the Hamiltonian does not preserve these symmetries, since the $$\Gamma^{(1,2)}_i$$ don't commute with this symmetry.
Instead, you need to perform a local basis rotation making the Gammas diagonal, but the Omega offdiagonal. Then your approach would be correct.
See e.g. the Appendix A of @aeberharter's recent paper arXiv:2106.15462 for more details. Alexander has a working implementation of the Potts model; if he's willing to share it, I'd be happy to include it as a model into TeNPy!

Note that the 2-state Potts model reduces to the Transverse field ising model. For the latter, TeNPy also writes
$$H= \sum_i X_i X_{i+1} + g \sum_i Z_i$$ for exactly the same reason: if you would write the "usual" $$H'= \sum_i Z_i Z_{i+1} + g \sum_i X_i$$, the Z_2 symmetry would not be diagonal in the local basis.
nsherman
Posts: 10
Joined: 21 Apr 2021, 00:16

### Re: Charge Info for Z3 symmetry in 3-state Potts Model

Great, thank you Johannes!
ahenry
Posts: 2
Joined: 21 Jul 2021, 01:45

### Re: Charge Info for Z3 symmetry in 3-state Potts Model

I have played around with various Zn models using Tenpy. You can usually find an equivalent model which has a nice diagonal symmetry by interchanging Z and X (or Omega and Gamma). I believe interchanging Z and X can be described as a local coordinate transformation, and doesn't affect the physics.
Edit: that's exactly what Johannes is saying, somehow I missed it