+1 vote
asked by (320 points)

I recently want to construct a general two-body interaction term like C^{\dag}{i,\sigma}C^{\dag} _ {j,\sigma^{\prime}}C{k,\sigma^{\prime}}C_{l,\sigma}, where i, j, k, l are sites and \sigma, \sigma^{\prime} are spins. Is there any way to construct an operator like that using AutoMPO class? Thank you.

commented by (70.1k points)
Ok so the new AutoMPO is live on Github. If you pull the latest master branch and recompile, then use AutoMPO it should now be able to handle terms with more than two operators, such as the term you mentioned. Just as with the sample/exthubbard.cc code, you have to respect fermion anticommutation rules when defining the Hamiltonian, so take care to write the C and Cdag operators in the correct order.
commented by (320 points)
Thank you very much. This feature is helpful in my research. I have some question about this new feature. First, do I have to insert F operators when I am computing something like <C_iC_jC^{\dag}_kC^{\dag}_l>? Second, is it allowed to put four fermion operators (or more) together such as C_i^{\dag}C_iC_i^{\dag}C_i which all act on the same site? Third, does the fermion anti-commutation rule in your response means the order in original hamiltonian? Do I have to take care about the order of the MPO? I notice that there is a sign difference between ITensor 1 and ITensor 2 for extended Hubbard model
commented by (70.1k points)
Good questions. Some of this is covered in the tutorial on fermions if you need to read more about it: http://itensor.org/docs.cgi?page=tutorials/fermions

1. Yes, you do have to explicitly put in F operators when measuring correlation functions still. The reason is that when you are getting operators from the sites.op method, it is returning individual tensors to you and currently these tensors have no way of knowing about the existence of fermions on other sites since they are just local tensors. (In the future I plan to experiment with making fermionic IQIndices automatically anticommute - stay tuned.)

2. You should not put four fermion operators on the same site anyway, since this would be zero by definition when acting on a local Hilbert space that can only have at most one spin up and one spin down electron.

3. Yes, by respecting the fermion anti-commutation I meant writing the order and the signs of the terms you put into the AutoMPO in the same way you would on paper when considering the correct fermion anticommutation rules. So there is more than one correct way to input the terms, but you just have to make sure that whatever choice you make matches what you would write on paper (e.g. for the Hermitian conjugate of the hopping term Cdag_i C_j you could either put + Cdag_j C_i or -C_i Cdag_j  (here assuming i != j).

Here is a snippet of the code I am currently using to input the two-particle terms of a chemistry Hamiltonian, where "V" means a particular V_ijkl:

            if(i != j && k != l)
                ampo += V,"Cdagup",i,"Cdagup",j,"Cup",k,"Cup",l;
                ampo += V,"Cdagdn",i,"Cdagdn",j,"Cdn",k,"Cdn",l;
            ampo += V,"Cdagup",i,"Cdagdn",j,"Cdn",k,"Cup",l;
            ampo += V,"Cdagdn",i,"Cdagup",j,"Cup",k,"Cdn",l;
commented by (320 points)
Thank you for your explanation in detail. I am now using AutoMPO to construct an IQMPO say C^{\dag}_iC^{\dag}_jC_kC_l on only four sites and call psiHphi to compute the expectation value of a given IQMPS. In this case, do I have explicitly put F operators in AutoMPO? Thank you.
commented by (70.1k points)
The rule for AuotMPO is that you never have to put F operators, regardless of what you are using the AutoMPO for.

For operators obtained one at a time from a "sites" (SiteSet) object, you do have to put in F's.

1 Answer

+2 votes
answered by (70.1k points)

Hi, this is a good question. Right now there is not, but we have a new prototype AutoMPO that can handle an arbitrary-size product of operators (not limited to just two). I'm hoping to release it later this week, actually, but we'll see how it goes. I'll post another reply when it's ready.

commented by (70.1k points)
See above comments for discussion of this feature, which is now live ^
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.