Processing math: 100%

iDMRG: Calculating infinite systems

Thomas E. Baker and Benedikt Bruognolo—September 16, 2015

If we want to calculate a translationally invariant system, such as an infinite spin-1 chain, then we can use the iDMRG algorithm which grows a large system in a computationally cost effective way to approximate the bulk of large system. The bulk of a large system mimicks the translationally invariant system. Calculating infinite systems with DMRG uses the same concepts as finite DMRG but does so in a slightly different way. It is most convenient to use the ΛΓ , iDMRG for unit cells with even numbers of sites and odd numbered unit cells. ITensor's idmrg function is detailed here.

The Algorithm: Infinite DMRG (iDMRG)

Having understood ΛΓ notation, we can introduce the algorithm used by ITensor to calculate the infinite system ground state.

We first begin with an even numbered unit cell (and will discuss the odd unit cell variation afterward) and use an example of a two-site unit cell. Use of the ITensor function idmrg is in the next section.

The two-site unit cell appears diagrammatically as

unit cell

The Λ1 term is introduced to make the cell translationally invariant. If we go back to our discussion of the ΛΓ notation, then we notice that our infinite system is a series of repeating ΛΓ terms like ΛΓΛΓΛΓ . But our two site unit cell does not have this form in AB notation by itself! We are missing a factor of Λ1 that we included above.

UnitCell=AΛBΛ1=ΛΓΛΓΛΛ1

This produces a translationally invariant unit cell. Note that we also could have placed the Λ1 on the left side instead of the right side as shown above.

Initialization

The main idea of iDMRG is to start with a finite system and insert the unit cell repeatedly until self-consistency. To begin, we start with the smallest finite system of equal size to the unit cell. We can run a finite system DMRG calculation to obtain the ground state of just the two-site system.

two site

=|ψ

But the wave function for the two-site unit cell does not approximate the infinite system very effectively because it has edges, so the goal will be to start with this wavefunction and grow the system in the middle. Edge effects from the incorrect boundary conditions will go away as we grow the system.

To prepare the system for an insertion of the unit cell, we take an SVD of this wavefunction and obtain the following diagram

two site

=A10Λ0B20

The subscripts corresponds to the level of the calculation (we start on the 0th level). The Λ0 tensor is information we need for the first level. Superscripts show the site index; a site index does not belong to the orthogonality matrix because it sits in between A and B .

The first level of the calculation requires the determination of the system with two unit cells.

two site

Once again placing the orthogonality center in the middle, we obtain

two site

=A11A21Λ1B31B41

This completes the initialization of the problem. We are now ready to insert the unit cell and may do so with the following steps.

Growing the system

The inner two sites of the four-site system look like our unit cell.

two site

=A11]A21Λ1B31[B41

In the diagram above, we have blocked off the inner two sites, sites 2 and 3, from the left and right environment blocks. The environment tensors will not change for the rest of the computation. Let's grow the system size by inserting unit cells in between the braces we drew on the diagram. For example, we show one unit cell inserted (between parentheses) as

Inserted unit cell

=A11](A21Λ1B31Λ10)A41Λ1B51[B61

The subscript on Λ10 is best justified when we review the general algorithm below. We will briefly mention it is a question of matching the bases of the many body states in the U and V matrices of the SVD. It can be regarded as being consistent with the general algorithm.

The two terms AΛB between the braces can be regauged in two ways. We can "roll" the orthogonality center to the left

roll left

A41Λ1B51ΛL2B42B51

Note that the tensor on the right, the rightmost B, is unchanged. The tensor A has been changed, however.

We can also roll the center to the right

roll right

A21Λ1B31A21A32ΛR2

The leftmost tensor A21 has not been changed while the other, B31 , has. At this point, we should keep track of which tensors correspond to the current iteration (do not change) and which tensors belong to the next iteration (do change).

Assigning subscripts of 1 for this step and 2 for the next, we get after rolling

unit cell roll right

A11](A21Λ1B31Λ10)A41Λ1B51[B61
=A1](A1A2ΛL2Λ10)ΛR2B2B1[B1

The environment is then grown by one tensor (in the case of a unit cell bigger than two sites, each environment receives the number of tensors in a unit cell divided by two).

unit cell updated environment

=A1A1]A2ΛL2Λ10ΛR2B2[B1B1

The term A2ΛL2Λ10ΛR2B2 inside the bracket can then be placed into a Davidson algorithm. The output of the Davidson algorithm, decomposed into A2Λ2B2 by an SVD and used in the next step of the algorithm, is the optimized approximation of the ground state. For more sites in the unit cell, we would sweep through the lattice like in finite system DMRG to optimize the unit cell.

General algorithm

Let's skip ahead to a higher step ( n ) and see what everything looks like to review. Many steps into the algorithm, we have a network that looks like

Deep algorithm

=An2An1]AnΛnBn[Bn1Bn2

Inserting a unit cell, we find

Deep algorithm insert unit cell

=An2An1](AnΛnBnΛ1n1)AnΛnBn[Bn1Bn2

We now discuss why we use the Λ1 from the n1 th step. After the optimization (i.e., Davidson and SVD steps), we have a term like AnΛnBn but the basis of the links connected to the environment tensors must be the same as the first and last tensor in the block. The environment tensors have links defined in the previous iteration, so they must connect to the tensor from the n1 th step.

Rolling left and rolling right, we obtain

Rolling the unit cell

=An2An1]AnAn+1ΛLn+1Λ1n1ΛRn+1Bn+1Bn[Bn1Bn2

Now we can grow the environment blocks by one tensor. The environment block tensors never need to be touched again.

Grow environment

=\ldots A_{n-2}A_{n-1}A_n\Big]A_{n+1}\Lambda^L_{n+1\}\Lambda^{-1}_{n-1}\Lambda^R_{n+1}B_{n+1}\Big[B_nB_{n-1}B_{n-2}\ldots

We can use the Davidson algorithm to find the optimal ground state of the term inside the braces A_{n+1}\Lambda^L_{n+1\}\Lambda^{-1}_{n-1}\Lambda^R_{n+1}B_{n+1} and obtain the SVD of this expression. This gives the updated tensor An+1Λn+1Bn+1 . Then we can restart the process until the norm of the overlap of Λ matrices is the identity between steps.

Λn1|Λn=1

Odd numbered unit cells

This is not implemented in ITensor at the current time but is similar to the even numbered unit cell algorithm. The extra tensor is pulled in from the environment when necessary and replaced once computation is finished for that step.

References

[1] IP McCulloch, arXiv preprint arXiv:0804.2509 (2008)


Back to Tutorials
Back to Main