Bond dimension is not gorwing with time in the TEBD calcultaion of a product state

Hi there!
I am trying to run the TEBD code in the tutorial. Instead of initializing the psi as a product state of alternating up and down spins, I tried to evolve a intial product state with only one spin up in the central site and keep all the others spins down.

@show states_1 = [["Dn" for i in 1:49];"Up";["Dn" for i in 1:50]]
psi = productMPS(s,states_1) 

The result of the expectation value of "Sz" shows that the spin up spread out from the central site. But when I use the maxlinkdim(psi) to get the maximum bond dimension of psi, it is always 2 throughout the time evolution. I am confused why the bond dimension will not grow with time. Besides, the maximum value of the entanglement entropy will also not grow with time.

The code and results are shown in below.

using ITensors

function entropy_von_neumann(psi::MPS, N::Int)
    SvN = zeros(N,1)
    for b = 2:N-1
        orthogonalize!(psi, b)
        U,S,V = svd(psi[b], (linkind(psi, b-1), siteind(psi,b)))
        temp = 0.0
        for n=1:dim(S, 1)
            p = S[n,n]^2
            temp -= p * log(p)
        end
        SvN[b] = temp
    end
    return SvN
  end

let
  N = 100
  cutoff = 1E-8
  tau = 0.1
  ttotal = 5.0

  # Make an array of 'site' indices
  s = siteinds("S=1/2", N; conserve_qns=true)

  # Make gates (1,2),(2,3),(3,4),...
  gates = ITensor[]
  for j in 1:(N - 1)
    s1 = s[j]
    s2 = s[j + 1]
    hj =
      op("Sz", s1) * op("Sz", s2) +
      1 / 2 * op("S+", s1) * op("S-", s2) +
      1 / 2 * op("S-", s1) * op("S+", s2)
    Gj = exp(-im * tau / 2 * hj)
    push!(gates, Gj)
  end
  # Include gates in reverse order too
  # (N,N-1),(N-1,N-2),...
  append!(gates, reverse(gates))

  # Initialize psi to be a product state (alternating up and down)
#   psi = MPS(s, n -> isodd(n) ? "Up" : "Dn")

  @show states_1 = [["Dn" for i in 1:49];"Up";["Dn" for i in 1:50]]
  psi = productMPS(s,states_1) 

  magz = expect(psi, "Sz")
  for (j,mz) in enumerate(magz)
    println("$j $mz")
  end
  @show flux(psi)

  c = div(N, 2) # center site

  # Compute and print <Sz> at each time step
  # then apply the gates to go to the next time
  for t in 0.0:tau:ttotal
    # magz = expect(psi, "Sz")
    # for (j,mz) in enumerate(magz)
    #   println("$j $mz")
    # end

    Sz = expect(psi, "Sz"; sites=c)
    println("$t $Sz")

    t≈ttotal && break

    psi = apply(gates, psi; cutoff)
    normalize!(psi)
    @show maxlinkdim(psi)
    SvN_Temp = entropy_von_neumann(psi, N)
    @show maximum(SvN_Temp)
  end 
  return
end

Results:

0.0 0.5
maxlinkdim(psi) = 2
maximum(SvN_Temp) = 0.01743505441971284
0.1 0.4950135149276232
maxlinkdim(psi) = 2
maximum(SvN_Temp) = 0.05562015047896065
0.2 0.48016585908997045
maxlinkdim(psi) = 2
maximum(SvN_Temp) = 0.10612344668695124
0.3 0.45578929774606464
maxlinkdim(psi) = 2
maximum(SvN_Temp) = 0.1640676416226671
0.4 0.42242744821683054
maxlinkdim(psi) = 2
maximum(SvN_Temp) = 0.2258378907679655
0.5 0.3808202162318615
maxlinkdim(psi) = 2
maximum(SvN_Temp) = 0.2885714090964613
0.6 0.3318834419498602
maxlinkdim(psi) = 2
maximum(SvN_Temp) = 0.3499687986794842
0.7 0.27668379236655216
maxlinkdim(psi) = 2
maximum(SvN_Temp) = 0.40820988555277926
0.8 0.21640976002397497
maxlinkdim(psi) = 2
maximum(SvN_Temp) = 0.46190929704093553
0.9 0.15233944868930394
maxlinkdim(psi) = 2
maximum(SvN_Temp) = 0.5100863847221536
1.0 0.08580630088701748
maxlinkdim(psi) = 2
maximum(SvN_Temp) = 0.5521378484330988
1.1 0.01816370509064726
maxlinkdim(psi) = 2
maximum(SvN_Temp) = 0.5878071939413907
1.2 -0.049250466229190604
maxlinkdim(psi) = 2
maximum(SvN_Temp) = 0.6171480669471001
1.3 -0.11514827858176316
maxlinkdim(psi) = 2
maximum(SvN_Temp) = 0.6404802940610038
1.4 -0.17832421521588424
maxlinkdim(psi) = 2
maximum(SvN_Temp) = 0.6583387373556082
1.5 -0.23768471555704831
maxlinkdim(psi) = 2
maximum(SvN_Temp) = 0.6714160828759874
1.6 -0.29227394994377015
maxlinkdim(psi) = 2
maximum(SvN_Temp) = 0.6805017595578058
1.7 -0.34129513600644973
maxlinkdim(psi) = 2
maximum(SvN_Temp) = 0.6864200778448493
1.8 -0.38412683444907847
maxlinkdim(psi) = 2
maximum(SvN_Temp) = 0.689971437723009
1.9 -0.42033383215526776
maxlinkdim(psi) = 2
maximum(SvN_Temp) = 0.691880869519524
2.0 -0.449672373595029
maxlinkdim(psi) = 2
maximum(SvN_Temp) = 0.6927580248592464
2.1 -0.47208972979776515
maxlinkdim(psi) = 2
maximum(SvN_Temp) = 0.6930719345192227
2.2 -0.4877182113450301
maxlinkdim(psi) = 2
maximum(SvN_Temp) = 0.6931423093706478
2.3 -0.49686393891828723
maxlinkdim(psi) = 2
maximum(SvN_Temp) = 0.6931471805433747
2.4 -0.499990836516119
maxlinkdim(psi) = 2
maximum(SvN_Temp) = 0.6931445705505692
2.5 -0.49770045105008104
maxlinkdim(psi) = 2
maximum(SvN_Temp) = 0.6931041464878136
2.6 -0.49070832301232703
maxlinkdim(psi) = 2
maximum(SvN_Temp) = 0.6929437841377276
2.7 -0.47981772669898154
maxlinkdim(psi) = 2
maximum(SvN_Temp) = 0.692565822350067
2.8 -0.4658916641677985
maxlinkdim(psi) = 2
maximum(SvN_Temp) = 0.6918884382114975
2.9 -0.4498240350816356
maxlinkdim(psi) = 2
maximum(SvN_Temp) = 0.6908687824084694
3.0 -0.4325109088632561
maxlinkdim(psi) = 2
maximum(SvN_Temp) = 0.689515994205459
3.1 -0.4148228016586001
maxlinkdim(psi) = 2
maximum(SvN_Temp) = 0.6878937111980494
3.2 -0.397578806884134
maxlinkdim(psi) = 2
maximum(SvN_Temp) = 0.6861130255684347
3.3 -0.3815233478046553
maxlinkdim(psi) = 2
maximum(SvN_Temp) = 0.6843179110558146
3.4 -0.3673062216782393
maxlinkdim(psi) = 2
maximum(SvN_Temp) = 0.6826658997798848
3.5 -0.3554664567660881
maxlinkdim(psi) = 2
maximum(SvN_Temp) = 0.6813071506686422
3.6 -0.34642041167937426
maxlinkdim(psi) = 2
maximum(SvN_Temp) = 0.6803653668658161
3.7 -0.3404543529116656
maxlinkdim(psi) = 2
maximum(SvN_Temp) = 0.6799220408508695
3.8 -0.33772160874255036
maxlinkdim(psi) = 2
maximum(SvN_Temp) = 0.6800077045408002
3.9 -0.3382442463755545
maxlinkdim(psi) = 2
maximum(SvN_Temp) = 0.6806006542363314
4.0 -0.34191906567709857
maxlinkdim(psi) = 2
maximum(SvN_Temp) = 0.68163191959167
4.1 -0.3485275652930903
maxlinkdim(psi) = 2
maximum(SvN_Temp) = 0.6829962004113923
4.2 -0.3577494181406905
maxlinkdim(psi) = 2
maximum(SvN_Temp) = 0.6845665608240853
4.3 -0.3691788612897342
maxlinkdim(psi) = 2
maximum(SvN_Temp) = 0.6862105750575804
4.4 -0.38234337991039236
maxlinkdim(psi) = 2
maximum(SvN_Temp) = 0.6878055872202065
4.5 -0.39672394458975574
maxlinkdim(psi) = 2
maximum(SvN_Temp) = 0.6892511595450802
4.6 -0.4117760590337785
maxlinkdim(psi) = 2
maximum(SvN_Temp) = 0.6904773499203951
4.7 -0.4269508670252502
maxlinkdim(psi) = 2
maximum(SvN_Temp) = 0.6914481743457457
4.8 -0.44171558284653406
maxlinkdim(psi) = 2
maximum(SvN_Temp) = 0.6921603178169736
4.9 -0.45557255521829765
maxlinkdim(psi) = 2
maximum(SvN_Temp) = 0.692637780125144
5.0 -0.46807634254715635

Thanks for your time in advance.
Best,
Huang

My bet is that because you are conserving S_z and because your initial state has only one down spin, that your state at all times is just a superposition of the form:

\sum_j \psi_j \ket{\downarrow_1 \downarrow_2 \cdots \uparrow_j \cdots \downarrow_n}

which is like a “single-particle” state of an up spin in a background of ‘vacuum’ down spins. In this setting, the S^+ S^- part of the Hamiltonian just acts like a “hopping” term and the S^z S^z part just like an “interaction” but here there is just one particle so the interaction part does not do anything non-trivial.

So my bet is that the bond dimension really is just very close to 2 throughout until maybe longer times and what you are seeing is accurate.

1 Like

Thanks for your reply. It makes a lot of sense to me . :slight_smile: