I’m doing DMRG simulation for AKLT model, and Heisenberg model. Here is my Hamiltonian for AKLT model, for example:
ITensors.space(::SiteType"S=1") = 3 ITensors.op(::OpName"Sx", ::SiteType"S=1") = (1/sqrt(2)) * [0 1 0; 1 0 1; 0 1 0] ITensors.op(::OpName"Sy", ::SiteType"S=1") = (1/sqrt(2)) * [0 -1im 0; 1im 0 -1im; 0 1im 0] ITensors.op(::OpName"Sz", ::SiteType"S=1") = [1 0 0; 0 0 0; 0 0 -1] os = OpSum() # OBC for j = 1:N-1 os += 1.0, "Sx", j, "Sx", j + 1 os += 1.0, "Sy", j, "Sy", j + 1 os += 1.0, "Sz", j, "Sz", j + 1 os += 1 / 3, "Sx", j, "Sx", j + 1, "Sx", j, "Sx", j + 1 os += 1 / 3, "Sy", j, "Sy", j + 1, "Sy", j, "Sy", j + 1 os += 1 / 3, "Sz", j, "Sz", j + 1, "Sz", j, "Sz", j + 1 end # PBC os += 1.0, "Sx", 1, "Sx", N os += 1.0, "Sy", 1, "Sy", N os += 1.0, "Sz", 1, "Sz", N os += 1 / 3, "Sx", 1, "Sx", N, "Sx", 1, "Sx", N os += 1 / 3, "Sy", 1, "Sy", N, "Sy", 1, "Sy", N os += 1 / 3, "Sz", 1, "Sz", N, "Sz", 1, "Sz", N H = MPO(os, sites)
Now, I’m setting a dims-array, like dims=[200, 300, 400, 600], and then the simulation code is
for k in 1:length(dims) dim = dims[k] println("dim = ", dim) nsweeps = 10 # number of sweeps maxdim = [dim] # gradually increase states kept cutoff = [1E-15] # desired truncation error # if k == 1 # nsweeps = 20 # number of sweeps # end energy = 0.00 if k == 1 psi0 = random_mps(sites; linkdims=dim) energy, psi = dmrg(H, psi0; nsweeps, maxdim, cutoff) else energy, psi = dmrg(H, psi; nsweeps, maxdim, cutoff) end end
I use dims=[300, 400, 600, 800] for L=128 to 192, then, I get the output
dim = 300
After sweep 1 energy=-175.6700890962815 maxlinkdim=300 maxerr=3.82E-03 time=537.875
After sweep 2 energy=-175.7735744967423 maxlinkdim=300 maxerr=1.44E-10 time=522.379
After sweep 3 energy=-175.78601502265704 maxlinkdim=300 maxerr=3.35E-12 time=521.770
After sweep 4 energy=-175.78880911048893 maxlinkdim=300 maxerr=3.68E-13 time=426.888
After sweep 5 energy=-175.78980642882556 maxlinkdim=287 maxerr=2.42E-15 time=233.428
After sweep 6 energy=-175.79032944824485 maxlinkdim=255 maxerr=1.00E-15 time=142.528
After sweep 7 energy=-175.79070715694272 maxlinkdim=261 maxerr=1.00E-15 time=110.557
After sweep 8 energy=-175.79097864921798 maxlinkdim=231 maxerr=1.00E-15 time=93.435
After sweep 9 energy=-175.79120153292308 maxlinkdim=215 maxerr=1.00E-15 time=89.942
After sweep 10 energy=-175.7913800158873 maxlinkdim=200 maxerr=1.00E-15 time=96.384
M = 1.8748952508287908
dim = 400
After sweep 1 energy=-175.79152353841388 maxlinkdim=257 maxerr=9.99E-16 time=102.785
After sweep 2 energy=-175.7916364828066 maxlinkdim=282 maxerr=1.00E-15 time=116.808
After sweep 3 energy=-175.7917243558656 maxlinkdim=241 maxerr=1.00E-15 time=121.927
After sweep 4 energy=-175.7917937179097 maxlinkdim=258 maxerr=1.00E-15 time=124.382
After sweep 5 energy=-175.79184741320583 maxlinkdim=222 maxerr=9.99E-16 time=119.985
After sweep 6 energy=-175.79188901694073 maxlinkdim=201 maxerr=1.00E-15 time=117.388
After sweep 7 energy=-175.79192096191525 maxlinkdim=199 maxerr=1.00E-15 time=116.917
After sweep 8 energy=-175.79194529746766 maxlinkdim=225 maxerr=1.00E-15 time=117.195
After sweep 9 energy=-175.79196390679022 maxlinkdim=261 maxerr=1.00E-15 time=120.797
After sweep 10 energy=-175.79197853005198 maxlinkdim=295 maxerr=9.99E-16 time=120.388
M = 1.6199579500487467
dim = 600
After sweep 1 energy=-175.7919895910903 maxlinkdim=200 maxerr=1.00E-15 time=119.369
After sweep 2 energy=-175.79199808350663 maxlinkdim=204 maxerr=9.99E-16 time=116.197
After sweep 3 energy=-175.79200452952952 maxlinkdim=200 maxerr=1.00E-15 time=114.137
After sweep 4 energy=-175.7920094574526 maxlinkdim=196 maxerr=1.00E-15 time=114.450
After sweep 5 energy=-175.79201323282263 maxlinkdim=200 maxerr=1.00E-15 time=115.410
After sweep 6 energy=-175.79201611908252 maxlinkdim=199 maxerr=1.00E-15 time=115.764
After sweep 7 energy=-175.79201830913698 maxlinkdim=202 maxerr=1.00E-15 time=114.662
After sweep 8 energy=-175.79202000072257 maxlinkdim=199 maxerr=1.00E-15 time=114.225
After sweep 9 energy=-175.79202129106199 maxlinkdim=198 maxerr=1.00E-15 time=114.275
After sweep 10 energy=-175.79202227249195 maxlinkdim=198 maxerr=9.99E-16 time=114.096
M = 1.5496199741177734
dim = 800
After sweep 1 energy=-175.79202301984716 maxlinkdim=199 maxerr=1.00E-15 time=116.524
After sweep 2 energy=-175.79202359423184 maxlinkdim=197 maxerr=1.00E-15 time=113.040
After sweep 3 energy=-175.79202403002986 maxlinkdim=197 maxerr=1.00E-15 time=113.935
After sweep 4 energy=-175.79202436428295 maxlinkdim=197 maxerr=1.00E-15 time=113.379
After sweep 5 energy=-175.79202461923285 maxlinkdim=198 maxerr=1.00E-15 time=113.582
After sweep 6 energy=-175.79202481307132 maxlinkdim=197 maxerr=1.00E-15 time=113.391
After sweep 7 energy=-175.79202496037252 maxlinkdim=198 maxerr=9.99E-16 time=113.416
After sweep 8 energy=-175.79202507216422 maxlinkdim=196 maxerr=1.00E-15 time=112.726
After sweep 9 energy=-175.79202515921943 maxlinkdim=198 maxerr=9.99E-16 time=112.785
After sweep 10 energy=-175.79202522452573 maxlinkdim=195 maxerr=1.00E-15 time=113.054
M = 1.5312736167728396
It seems that it gives no convergence, and the bond-dim is reducing step by step.
Why it appears? and how to solve it?