# Periodic MPO

edited

I am studying a 1d periodic quantum chain by DMRG, and want to measure (psi, O * psi) for an operator that is a tensor product of N two-site operators, N being the number of lattice sites. While I know I how to write O as a periodic MPO, where every site is the same tensor T, I do not know how to link the leftmost site 1 to the rightmost site N. Can I add fictitious links for all neighboring pairs (1,2) (2,3) (3,4) ... (N-1,N) to connect 1 and N?

I know that ITensor is mainly designed for open chains, but for my current project it is quite important that I study the periodic chain, even if I am limited to short chains due to the much worse computational efficiency.

AutoMPO is able to construct an MPO even when there is an interaction involving sites 1 and N, so I wonder if there is some universal way to do this for any MPO. AutoMPO assumes that we have a sum of tensor products of one-site operators, but I hope to relax this assumption.

I also tried the following and failed: act twice by a right-moving translation MPO constructed out of swaps, and then setting sites 2 and 3 to be T. I surmise that the failure is because after acting translation, the physical link (N,1) is now represented by numerous links involving all sites in the open MPO representation, and setting 2 and 3 to T destroyed some of those links.

Another workaround is try to represent my MPO as a product of few-site gates, say 2-site. In this case, the leftmost and rightmost sites can be linked by a translation(+1)---gate(1,2)---translation(-1) sequence. But generally finding such a product representation for an arbitrary all-site operator may be quite difficult, so I am hoping that there is some alternative.

Thank you very much!

commented by (13.6k points)
What particular problem do you face when you create an open boundary MPO with AutoMPO that connects sites (N, 1)? That is the simplest solution.
commented by (120 points)
Thank you for your comment.  If I understand AutoMPO correctly, it requires one to write an operator as a sum of simple tensor products of single-site operators.  The operator I am interested in does not take this form.  Rather, it is a tensor product of N two-site operators.  More concretely, it is (5.14) in https://arxiv.org/abs/2008.08598.

You can consider a ladder with only two rungs as a chain with periodic boundary conditons.

commented by (120 points)

To be a little more specific, I am studying a 1d quantum chain by DMRG, and want to measure (psi, O * psi) for a periodic MPO O.  My question was how to construct O in ITensor, given the open nature of MPS and MPOs it uses.

Continueing from discussion above:

I don't understand all of the notation there, but indeed stat mech models are a bit outside the scope of AutoMPO. However, my understanding was that every MPO/operator should be expandable in terms of a sum of tensor products of single-site operators (for example for a qubit or spin-1/2 system, tensor products of pauli operators form a complete basis), so in principle if you could expand the MPO in a complete operator basis and then put it into AutoMPO. Maybe that is only the case for Hermitian operators and your example isn't Hermitian?

However, if you already have the analytic form of the MPO tensors, to make an MPO periodic really just requires making the first and last dangling indices equal. For example:

  function make_mpo_tensor(s, l, r)
T = ITensor(s, s', l, r)
# Code to set the elements of the MPO tensor goes here
end

# N site system
N = 4
l = [Index(3, "l$n") for n in 1:N] s = [Index(2, "s$n") for n in 1:N]

M = MPO(N)
M[1] = make_mpo_tensor(s[1], l[N], l[1])
for n in 2:N
M[n] = make_mpo_tensor(s[n], l[n-1], l[n])
end


For smaller systems, you can contract them all together with prod(M) or contract(M...) to see that you are only left with site indices and it should be the exponentially large operator you are looking for.

Note that built-in ITensor functions like inner(psi, M, psi) won't generally work with these kinds of MPOs (but those shouldn't be hard to write on your own). You can also manually turn this kind of periodic MPO into an open boundary MPO with a larger bond dimension by running the extra link index through the system (essentially by contracting with an identity MPO that has link indices that are the same as the link indices at the edges of the system).

commented by (13.6k points)
Also to add on, you could always start by making a finite MPO by picking some boundary condition for the MPO, and then make the system size larger to get the thermodynamic limit. This would allow you to make use of all of the finite MPS/MPO code in ITensor, and not pay the extra cost of using periodic MPS/MPO. But maybe you are interested in comparing to exact results for periodic systems or making use of certain periodic boundary conditions?