0 votes
asked by (950 points)
edited by

Hi,

I tested some calculations with Kitaev Chain. The energy levels should not depend on the sign of @@\Delta@@ (the coefficient of @@c^\dagger c^\dagger + cc@@ term). ITensor gives correct energy, but there is some problems for the entanglement entropy. The following code works with ITensor3. But ITensor2 gives different entanglement entropy (close to zero).

#include "itensor/all.h"

using namespace itensor;

int
main()
    {
    auto N = 100;

    auto sites = Spinless(N,{"ConserveNf",false});

    auto ampo = AutoMPO(sites);

    for(int b = 1; b <= N-1; ++b)
    {
        ampo += -1,"N",b;
        ampo += -1,"Cdag",b,"C",b+1;
        ampo += -1,"Cdag",b+1,"C",b;
        ampo += -1,"Cdag",b,"Cdag",b+1;
        ampo += -1,"C",b+1,"C",b;
    }
    ampo += -1,"N",N;

    auto H = toMPO(ampo);
    auto state = InitState(sites);
    for(int is = 1; is <= N; ++is)
    {
    state.set(is,is%2==1 ? "1" : "0");
    }
    auto psi0 = randomMPS(state);

    auto sweeps = Sweeps(20);
    sweeps.maxdim() = 20,20,40,40,100,200,300,400;
    sweeps.cutoff() = 1E-10;

    auto [energy0, psi] = dmrg(H, psi0, sweeps, {"Quiet=",true});
    Print(energy0);

    return 0;
    }

When Jordan-Wigner transformed to spin-1/2. Neither ITensor3 nor ITensor2 gives correct entanglement entropy.

#include "itensor/all.h"

using namespace itensor;

int
main()
    {
    auto N = 100;

    auto sites = SpinHalf(N, {"ConserveSz=",false});

    auto ampo = AutoMPO(sites);

    for(int b = 1; b <= N-1; ++b)
    {
        ampo += -1,"Sz",b;
        ampo += -1,"S+",b,"S-",b+1;
        ampo += -1,"S+",b+1,"S-",b;
        ampo += -1,"S+",b,"S+",b+1;
        ampo += -1,"S-",b+1,"S-",b;
    }
    ampo += -1,"Sz",N;
    auto H = toMPO(ampo);

    auto state = InitState(sites);
    for(int is = 1; is <= N; ++is)
    {
    state.set(is,is%2==1 ? "Up" : "Dn");
    }
    auto psi0 = randomMPS(state);

    auto sweeps = Sweeps(200);
    sweeps.maxdim() = 20,20,40,40,100,200,300,400;
    sweeps.cutoff() = 1E-10;

    auto [energy,psi] = dmrg(H,psi0,sweeps,{"Quiet",true,"EnergyErrgoal=",1E-8,"EntropyErrgoal=",1E-7});
    Print(energy);

    return 0;
    }

But everything works well when the coefficient of @@c^\dagger c^\dagger + cc@@ term reverses sign. Is there something wrong? Thanks.

Jin

commented by (7.3k points)
Hi Jin,

I am not an expert on the Kitaev model, but if I understand correctly you are saying that in ITensor v3, both the original Hamiltonian and the Jordan-Wignered version give the correct ground state energy, but for Delta = -1 the Jordan-Wignered version gives an entanglement entropy that you are not expecting. Is it possible that in that case, DMRG is giving you one of two degenerate ground states (i.e. maybe a Majorana mode sitting on either one edge or the other), and mixing the two would give a state with the entanglement entropy you expect?

Cheers,
Matt
commented by (950 points)
Hi Matt, thanks for the comment. For ITensor v3, yes, that is what I mean. I'm not sure. Maybe it is possible that dmrg gives one zero entanglement ground state. But why this only happens for spin model? For fermion model, ITensor v2 also gives an entanglement entropy close to zero. What changes made for ITensor v3 gives correct one for fermion?
commented by (7.3k points)
It seems like the discrepancy you are seeing is based on the symmetries that are being imposed. For example, in ITensor v3, you can impose spin parity symmetry like this:

    auto sites = SpinHalf(N, {"ConserveSz=",false,"ConserveParity=",true});

In that case, I see an entanglement of approximately log(2) (which I guess is what you were hoping to see) for both Delta = 1 or Delta = -1.

It seems like what is happening is the parity conservation both in the case of fermions and spins enforces that the ground state you find is the more entangled state (probably a superposition of the states with different Majorana modes on each end, if I were to guess). Not imposing this symmetry may mean that DMRG is able to find the less entangled state with only one Majorana mode on either end of the system (again, this is some conjecture since I have not studied the Kitaev chain very much and don't remember what the ground state is supposed to be). Perhaps the issue in your ITensor v2 code is that you are not imposing parity symmetry. In general, DMRG will be biased towards finding less entangled states.

Does that make sense to you? A lot of this is conjecture on my part based on what I am seeing from DMRG.

Cheers,
Matt
commented by (950 points)
Hi Matt,

Yes, it makes sense. The two ground states have different parity. I'm also new to Kitaev Chain, But I think that is the answer. Thanks for your help.

Jin

2 Answers

0 votes
answered by (7.3k points)

See the comments for the answer (because there is a degenerate groundspace, different states are found by DMRG depending on whether or not parity symmetry is imposed in both the fermionic and spin representations).

commented by (950 points)
Hi Matt, using {"ConserveParity=",true} is 2.5 times slower than using {"ConserveParity=",false}, is this normal?
commented by (7.3k points)
For what bond dimension? For small bond dimensions that is possible since there is a bit of overhead when using quantum numbers (since they are implemented with block sparse tensors, so there is some overhead to analyzing which blocks contract with which other block), but for larger bond dimensions that should not be the case.
commented by (950 points)
Yes, it is small dimension. Thanks.
0 votes
answered by (43.5k points)

Just a note also about the physics of the Kitaev chain: the ground states of the fermionic model versus the spin model are different (independent of DMRG or how you compute them). This is because for fermion systems, ground states should have a well-defined fermion parity. For this parity to be well-defined, the ground states have to be macroscopic superpositions of the ground states of the spin model. The spin model is just a simple ferromagnet, so has two product-state ground states.

So the behavior you are seeing is actually correct.

commented by (950 points)
Thanks for the explanations, very helpful.
Welcome to ITensor Support Q&A, where you can ask questions and receive answers from other members of the community.

Formatting Tips:
  • To format code, indent by four spaces
  • To format inline LaTeX, surround it by @@ on both sides
  • To format LaTeX on its own line, surround it by $$ above and below
  • For LaTeX, it may be necessary to backslash-escape underscore characters to obtain proper formatting. So for example writing \sum\_i to represent a sum over i.
If you cannot register due to firewall issues (e.g. you cannot see the capcha box) please email Miles Stoudenmire to ask for an account.

To report ITensor bugs, please use the issue tracker.

Categories

...