+1 vote
asked by (400 points)

I'm currently using version 2 of ITensor, so I will pose my problem in its language, but I believe my question is not version specific. My questions are about the Heisenberg.h sample code for spin-one moments, which I'm trying to extend to spin-half as an exercise. In particular, my questions are about the following bit of code:

    for(int l = 0; l <= N_; ++l) 
    q0.at(l) = Index(nameint("q0_",l),3);
    qP.at(l) = Index(nameint("qP_",l),1);
    qM.at(l) = Index(nameint("qM_",l),1);

    links.at(l) = IQIndex(nameint("hl",l),
                          q0[l],QN( 0),

First Question:
In the spin-half scenario, would the link QN's be identical to this spin-one example? My understanding is that the links should carry the difference in the quantum numbers of the physical sites. Following the docs, the "Sz=+1/2" and "Sz=-1/2" moments are coded QN(+1) and QN(-1) respectively. Naively, I would think that the link QN's would be {+1,0,-1} since, for example, "(+1/2) - (-1/2) = +1". However, since we code the half-integer spins using whole numbers, should I instead be thinking, for example, "QN(+1)-QN(-1)=QN(+2)"? Which would make the link QN's {+2,0,-2}. Same as spin-one.

Second Question:
What tells us that the dimension of the indices associated with the QN(-2) and QN(+2) quantum numbers should each be 1? I understand that the matrix of operators (i.e this matrix) has a total dimension 5. I further see that the net change in QN due to all the operators on any row/col is 0 for three of the rows, and +1 and -1 for the remaining two. Is this how one should determine the dimension of the indices associated with the QN's on the bond?

1 Answer

+2 votes
answered by (70.1k points)
selected by
Best answer

Hi, these are good questions. Glad you are working through this example, as it's very instructive about the structure of QN-conserving MPOs. First of all, please note that some of the choices in this code and MPO convention are not unique, but only up to gauge transformations. However, a lot of the choices are natural and reasonable for reasons we could get into after further discussion.

The broadest context here is that this is an MPO which is symmetry-preserving, so in the parlance of ITensor has net zero QN flux. We find for such MPOs, it's most natural to further require every MPO tensor individually to have zero flux too, just to set a clear convention. So that's the convention used here, which I think you already know.

To answer your first question, yes, the QN-flux of the S+ operator for the case of S=1/2 is equal to +2. Similarly the QN-flux of S- is -2. These fluxes are given in "ITensor units", where as you know +1 (ITensor) corresponds to +1/2 (physical) and +2 (ITensor) to +1 (physical) etc,

So because the S+ operator has net +2 flux, the MPO bond connecting it to the S- operator, which by convention points Out, or away from the S+ operator when making the S+ S- term, carries -2 flux. This makes all of the tensor net flux zero for those blocks.

Similarly for the case of S- S+ the MPO bond will carry +2 flux.

The other 0-flux sector of the MPO bond indices is for cases like the Sz Sz terms or for all identity operators to the right or left.

To your second question, regarding the dimensions. This just comes from the particular MPO (in this case a Hamiltonian) which is being made, and how many different types of terms. Roughly speaking, when not using additional compression tricks, the dimension of an MPO for a Hamiltonian with T different kinds of terms is T+2. So here T=3 (Sz Sz, S+ S-, S- S+). The +2 part in the T+2 within the MPO corresponds to the cases where there are identity operators either to the left (i.e. we haven't put down any non-trivial operators yet) or to the right (we are done placing all operators).

Finally, to your question, the dimension come from how many different terms carry the same QN flux across a bond. The two identity-string cases plus the Sz Sz terms all carry zero flux, so that's 3 different settings of the bond in the zero-flux sector. The remaining two cases are S+ S- (1 case in the -2 sector, so dimension of 1 there) and S- S+ (1 case in the +2 sector, so a dimension of 1 there also).

Hope that helps!


commented by (400 points)
This was extremely useful Miles -- thank you!
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.