# How to project into zero-momentum sector? (Julia)

retagged

In certain cases, one may wish to consider only zero-momentum states, i.e. translation-invariant states. Such a notion is only well-defined for periodic boundary conditions (PBC), but one can approximate it with open boundary conditions (OBC) as well.

An example of this is the lattice Schwinger model. If one is using OBC (as described in Equation 2.6 of https://arxiv.org/pdf/1305.3765.pdf), then one can find many low-lying states, compute some momentum proxy operator for each of these states, and identify those that have an expectation of the operator very close to zero. This is what the aforementioned paper does, as shown in Figure 3 and Equation 3.4. This works because the paper is interested in the first three zero-momentum states, and these aren't that bad. The first two zero-momentum states are the first two states anyway, and the third one only requires you to find about 10-15 extra states.

However, this method is unsuitable if one is going to have to comb through a great deal of states with momentum to find the very few with zero momentum. If it were possible, a far better method would be to somehow project into the zero-momentum sector, as described in https://arxiv.org/abs/1803.03326. This is only possible when the Hamiltonian uses periodic boundary conditions, i.e. it has the appropriate terms connecting the last site (or last few sites) with the first site (or first few sites), so it is not possible for the Hamiltonian presented in the first paper, but it is possible for the Hamiltonian presented in Equation 2 of the second paper. Appendix A of this paper gives a detailed explanation of momentum, charge, and parity conjugation in this particular lattice, and in particular it mentions that zero-momentum states are translation-invariant. However, I don't know how to restrict to only this set of states in ITensors.jl, especially since DMRG will explicitly make the state fail to be translation-invariant when it performs a local optimization.

My first thought is to make a projection operator P that kills every state of nonzero momentum while maintaining every state of zero momentum, and then optimizing the modified Hamiltonian H' = P^dagger HP, but I can't really think of a principled way of doing this, and the projector P would make H' significantly more complicated than H, probably to the point of it being unworkable when combined with other constraints. I feel that there must be some other way.

Does anybody know of an efficient way to restrict one's DMRG search to zero-momentum (i.e. translation-invariant) states in ITensors.jl, whether it is the above suggested method or any other method? Any help with this would be greatly appreciated.

commented by (8.9k points)
It sounds like you might want to use an MPS algorithm that works directly in the thermodynamic limit, such as iDMRG (https://arxiv.org/abs/0804.2509) or VUMPS (https://arxiv.org/abs/1701.07035). Unfortunately we don't have those built-in to ITensors.jl right now. I have been meaning to add support for VUMPS, but have had a lot of other things on my plate and was waiting for someone to request it. It is definitely something we want, I could possibly write up a rough version in the next few weeks. If you need it sooner, feel free to write a version yourself and ask questions about the implementation.