Project product state to fixed quantum number (QN conserving) MPS?

Hi!

Is there any way of generating a quantum number conserving MPS by projecting a product state that is a superposition of different quantum numbers? The simplest example would be constructing a state with fixed S^z from a product state of s^x_j eigenstates e.g. \ket{+}_1\otimes \ket{+}_2\cdots \otimes\ket{+}_N.

I could just construct the MPS by hand, but was wondering if there is another way.

Thanks!

1 Like

Hi Austen,
It’s a really good question. The short answer we don’t have a function for this in ITensor at this point.

The longer answer is that I do know of a nice algorithm for this which I’ve been wanting to write up for some time, and which would be useful to have. I can think of two versions of how to do this in an efficient way and here is a sketch of one: basically set up a DMRG calculation but without a Hamiltonian (similar to setting H = \mathbb{1}). Then in the “core” step of two-site DMRG project the wavefunction tensor into the total QN sector you want and SVD back to adapt the bond index. Then sweep to every pair of sites and repeat. To code this in the most efficient way, one can use the orthogonality properties of the MPS to not have to deal explicitly with the right-hand-side basis at all (it cancels with itself). Also I think one can prove this algorithm converges in a single pass over the MPS.

The other rather technical aspect about this is that while the above algorithm description would succeed at doing the projection exactly and efficiently, it would not introduce an exact blocking structure on the tensors, even though it would implicitly be there. So the code would have to also loop over the non-zero blocks and properly “load” then in to block-sparse ITensors if one wanted that property at the end. Could definitely be done but would be another technical complication.

I’d definitely like to have the above in the library – just a matter of when we can code it up.

1 Like

Thanks Miles!

Yesterday I would have blithely replied: “Surely it’s easier to just to construct it!”. Having now done that for my simple example I’m not so sure!