+2 votes
asked by (140 points)

I'm looking for a way to tell ITensors to keep a certain minimum number of singular values when I apply a two-site operator to an MPS.
I usually have an array ops of two-site ITensors, which I apply on an MPS state using apply(ops, state; cutoff=err), but no matter how low I set err, I never see the bond dimension increasing.
To be precise, I'm testing the evolution of a chain of 1/2-spins under a simple exchange Hamiltonian
starting from a state with a single spin in the "up" state, the others in the "down" state; even with err=1e-15 the bond dimensions never exceed 2.
If I recall correctly, theoretically speaking it could be higher, at least in the more central sites, but it doesn't happen here. It may be that the entanglement along the chain is so low that the singular values other than the first two are genuinely very tiny, but I would like to include them anyway, for the sake of testing.

I see that the svd function in the library has the mindim keyword, so the option is there, but I can't find a way to use it when I call product or apply.

commented by (70.1k points)
Hi Davide,
Your request is an interesting one: I agree it would be good if we had a way to really turn off truncation altogether for testing purposes, even if it led to exactly zero singular values (because then you can definitely look).

Let me comment on your setup first, though, then please let me know if you'd still like the "no truncating" feature.

From your initial state and the operator you've defined, I'm pretty sure what is happening is that one of the terms in your operator, when acting on a bond (j,j+1) is just flipping the two neighboring spins and the other is just evaluating to zero. That's if the spins are different. If they are the same then that term just gives zero.

So then I'm pretty sure your operator is just always mapping product states to product states and that's why the bond dimension doesn't grow (& I'm surprised it grows even to 2 and not just stays 1).

Finally, you can be assured that if the bond dimension doesn't grow, it's because the singular values really were zero or else below your cutoff (more precisely their sum was below the cutoff). So they must be smaller than 1E-15.

But if you think the feature of no truncation would still be helpful, it might not be too hard for us to add that.

commented by (140 points)
Thank you for your answer. I was probably too vague in my question, but the operator I am applying to the state is not just the Hamiltonian H, but actually exp(-iHt) for some real number t, so maybe this explains why the bond dimension is 2 instead of 1.
Anyway, yes, a `mindim` keyword would be useful to me in order to inspect the SVDs (but of course I don't want to demand anything); I would try to add it myself but I can't find where exactly the factorization is computed after the state is multiplied by an operator.

commented by (14.1k points)
I believe that all of the keyword arguments passed to `apply` just get forwarded through to `factorize`, so that should be the case with `mindim` as well. Did you try passing `mindim` to `apply`?

Also, if you don't specify `cutoff` at all, it should do no truncation. If that doesn't work, you could try setting `cutoff=0` or `cutoff=nothing`. The first one should only truncate singular values that are exactly zero, and the second should perform no truncation at all.

Please log in or register to answer this question.

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.