## correlation length in idmrg

How do I use this algorithm? What does that parameter do?
QichengTang
Posts: 32
Joined: 08 Jan 2019, 03:03

### correlation length in idmrg

Hi, everyone. I'm trying to calculate the correlation length for TFI chain near or away from the critical point.

I have test before, the calculated correlation length for critical point $$g=1$$ is agree with the pervious numeric presented by Frank Pollmann https://journals.aps.org/prl/abstract/1 ... 102.255701.

But problems appear when I turn off the $$Z_2$$ symmetry in idmrg. For TFI chain with $$g=0.9$$, it results $$28346588160.355114$$, in the case of $$Z_2$$ symmetry used, it results $$8.768279466136635$$.

Actually we know that the $$28346588160.355114$$ result is wrong, but why? It looks like here we have a little bug.

Below I post my code for calculation.

Code: Select all

from tenpy.algorithms import dmrg
from tenpy.networks.mps import MPS
from tenpy.models.tf_ising import TFIChain

def DMRG_tf_ising_infinite(g, chi, verbose=True):
print("infinite DMRG, transverse field Ising model")
print("g={g:.2f}".format(g=g))
model_params = dict(L=2, J=1., g=g, bc_MPS='infinite', conserve='best', verbose=verbose)
M = TFIChain(model_params)
product_state = ["up"] * M.lat.N_sites
psi = MPS.from_product_state(M.lat.mps_sites(), product_state, bc=M.lat.bc_MPS)
dmrg_params = {
'start_env': 10,
'mixer': False,
'trunc_params': {
'chi_max': chi,
'svd_min': None,
},
'max_E_err': 1.e-9,
'max_S_err': 1.e-6,
'update_env': 0,
'verbose': verbose
}
eng = dmrg.EngineCombine(psi, M, dmrg_params)
E, psi = eng.run()
print("E = {E:.13f}".format(E=E))
print("finial bond dimensions: ", psi.chi)
return psi

psi = DMRG_tf_ising_infinite(g=0.9, chi=20)
print(psi.correlation_length())
Johannes
A such enormous correlation length $$\xi > 10^10$$ means that the second eigenvalue of the transfer matrix is 1 up to numerical errors.
The reason is that the state you get is a cat state, i.e. a superposition of all $$|+x \rangle$$ and all $$|-x \rangle$$ states.