Correlation function with infinite boundary conditions

+1 vote
asked

I'm looking to compute correlation functions using infinite boundary conditions, based on this paper
https://arxiv.org/abs/1207.0652

What I'm wondering is if this functionality is already implemented somewhere?

The basic idea is you have an iMPS and an iMPO with some unit cell, then repeat this N times to create a 'window' into the infinite system, but you have to place edge tensors on both sides of the iMPS and iMPO to effectively described the semi-infinite chain on either side. In principle, once you have these edge tensors, then all finite system algorithms will work, and the boundary effects are greatly diminished.

The paper provides a prescription for what the boundary tensors are, but before I develop code to implement this, I figured I would check to see if this functionality is already present and I just missed it. My intuition is that, at least for ground state calculations, iDMRG will generate the relevant edge tensors, but I'm not positive.

Thank you for your time,
Nick

1 Answer

+1 vote
answered by (14.1k points)

Unfortunately we don't have that kind of functionality in a black box form yet, so you would need to develop most of it using basic ITensor building blocks.

I'm working on an infinite MPS package here: https://github.com/mtfishman/ITensorInfiniteMPS.jl but it is in very early stages and will take some time to get into a usable form. There is some nontrivial functionality implemented like gauging an infinite MPS:

https://github.com/mtfishman/ITensorInfiniteMPS.jl/blob/main/examples/infinitemps.jl

and finding an infinite MPS approximation for a finite MPS:

https://github.com/mtfishman/ITensorInfiniteMPS.jl/blob/main/examples/finite_mps_to_infinite_mps.jl

I started working on functionality for summing up infinite Hamiltonian terms with either local Hamiltonians or MPOs, but that functionality isn't quite working yet.

If you interested in trying something quite experimental, you could try contributing to that package. To get an idea of the interface, you can search through the source code, such as:

https://github.com/mtfishman/ITensorInfiniteMPS.jl/blob/354b0cb309c0c437fd8cf073cd03207e00183812/src/orthogonalize.jl

which is code for gauging an infinite MPS,

https://github.com/mtfishman/ITensorInfiniteMPS.jl/blob/main/src/infinitemps_approx.jl

which takes a finite MPS and variationally computes an infinite MPS approximation of the bulk of the system by maximizing the overlap. There is also:

https://github.com/mtfishman/ITensorInfiniteMPS.jl/blob/354b0cb309c0c437fd8cf073cd03207e00183812/src/vumps.jl

which is the beginning implementation of the VUMPS algorithm (https://arxiv.org/abs/1701.07035), an improved iDMRG algorithm. However, there was something off about how I was summing up the Hamiltonian terms so it isn't quite working yet.

The goal is to provide basic building blocks like the InfiniteMPS/InfiniteMPO types, gauging, getting fixed points of transfer matrices, computing infinite sums of local operators, grabbing slices of an infinite MPS as a finite MPS with some boundary condition, etc. to make implementing algorithms like the one in that paper very simple.

commented by (680 points)
It would be spectacular if this functionality was implemented, I personally would benefit greatly from it. I'll take a look at the package in its current form, and see if it is beneficial for my current project. Thank you for sharing this.

Nick
commented by (1.2k points)
Hi Matt, I am also looking for implementations of VUMPS, is it working in the current version of this package? Thanks.

Jin
commented by (14.1k points)