+1 vote
asked by (650 points)

I did some simple test about hubbard siteset and use "overlap" function to calculate matrix element of fermion hopping term and I just found some problems.

#include "itensor/all.h"

using namespace itensor;

int main()
{
    int N=100;
    auto tf=1.0;
    auto Uf=1.0;

auto sites=Hubbard(N);
auto ampo=AutoMPO(sites);
for(int i=1; i<N; i++)
{
    ampo += -tf, "Cdagup", i, "Cup", i+1;
    ampo += -tf, "Cdagup", i+1, "Cup", i;
    ampo += -tf, "Cdagdn", i, "Cdn", i+1;
    ampo += -tf, "Cdagdn", i+1, "Cdn", i;
}
for(int i=1; i<=N; i++)
{
    ampo += Uf, "Nup", i, "Ndn", i;
}
auto H=IQMPO(ampo);

/************** TEST *************/
auto s1=InitState(sites);
auto s2=InitState(sites);

s1.set(1,"UpDn");
s2.set(1,"Up");
s2.set(2,"Dn");

auto p1=IQMPS(s1);
auto p2=IQMPS(s2);

Print(overlap(p2,H,p1));

}
as shown in the source code, I expect overlap(p2,H,p1)=+1 due to the symmetry of fermion "UpDn" state as described in http://itensor.org/docs.cgi?page=tutorials/fermions . But the output is -1. This is puzzling. I also checked the source code of "hubbard.h" in Itensor and I found

if(opname == "Cdn")
        {
        Op.set(Dn,EmP,1); 
        Op.set(UD,UpP,-1); 
        }
    else
    if(opname == "Cdagdn")
        {
        Op.set(Em,DnP,1); 
        Op.set(Up,UDP,-1);
        }

and the minus sign in "Cdn" and "Cdagdn" is correct as I expected.

So, What's wrong with it or did I misunderstand the sign convention ?
Thanks.

1 Answer

0 votes
answered by (70.1k points)

Hi Junjie,
So just doing it in my head (meaning I could be making a mistake) there's:
1. a minus sign for the process of annihilating the down electron from the UpDn state (with an even number (=0) of electrons to the left of site 1
2. a minus sign from re-creating the down electron on site 2, because there are an odd number of electrons to the left of site 2
3. a minus sign from the -t coefficient of the hopping term where (t=1)

So overall a -1. Hope that helps -

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

...