0 votes
asked by (180 points)
edited by

Hi Everyone,

I'm trying to simulate time-evolution of Hubbard model with Trotter gate. I start from simple tight-binding model with time-independent Hamiltonian, so the energy should be conserved. However, when I try the code, I find the energy is not conserved even with very small time steps ~ 0.001. Here is a part of my code:

using Gate = BondGate<IQTensor>;
auto gates = vector<Gate>();
for(int b = 1; b <= L-1; ++b)
    {
    auto hterm = -1.*sites.op("Cdagup",b)*sites.op("Cup",b+1);
        hterm += -1.*sites.op("Cdagup",b+1)*sites.op("Cup",b);
        hterm += -1.*sites.op("Cdagdn",b)*sites.op("Cdn",b+1);
        hterm += -1.*sites.op("Cdagdn",b+1)*sites.op("Cdn",b);
    auto g0 = Gate(sites,b,b+1,Gate::tReal,tau/2.,hterm);
    gates.push_back(g0);
    }

for(int b = L-1; b >= 1; --b)
    {
    auto hterm = -1.*sites.op("Cdagup",b)*sites.op("Cup",b+1);
        hterm += -1.*sites.op("Cdagup",b+1)*sites.op("Cup",b);
        hterm += -1.*sites.op("Cdagdn",b)*sites.op("Cdn",b+1);
        hterm += -1.*sites.op("Cdagdn",b+1)*sites.op("Cdn",b);

    auto g0 = Gate(sites,b,b+1,Gate::tReal,tau/2.,hterm);
    gates.push_back(g0);
    }

auto args = Args("Cutoff=",cutoff,"Maxm=",mmax);

gateTEvol(gates, ttotal, tau, psi, args);

Can you tell me what's wrong with this? Also, I'm confused that if I use, for example,

hterm = +1.*sites.op("Cup",b+1)*sites.op("Cdagup",b);

I get a different result. Is this due to the anti-commutation of fermions?

Many thanks,

1 Answer

+1 vote
answered by (180 points)
edited by

Just for anybody interested, I fixed the problem after thinking about the anti-commutations of fermions. What I should do is to replace the C-operators to combinations of A- and F-operators as:

auto hterm = -1.*sites.op("Adagup*F",b)*sites.op("Aup",b+1);
hterm += -1.*sites.op("Adagdn",b)*sites.op("F*Adn",b+1);
hterm += +1.*sites.op("Aup*F",b)*sites.op("Adagup",b+1);
hterm += +1.*sites.op("Adn",b)*sites.op("F*Adagdn",b+1);

With this I see that the energy is conserved for time-independent Hamiltonian!

commented by (70.1k points)
Great to hear it! Thanks for sharing your solution
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

...