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())