correlation length in idmrg

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

correlation length in idmrg

Post by QichengTang »

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())
User avatar
Johannes
Site Admin
Posts: 207
Joined: 21 Jul 2018, 12:52
Location: UC Berkeley

Re: correlation length in idmrg

Post by 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.

See also the discussion in viewtopic.php?f=7&t=28.
Post Reply