DMRG fails to reproduce the same charge density wave pattern with the reference

Hi,
I am recently to reproduce the charge density wave (CDW) state of a one-dimensional extended Bose-Hubbard model with open boundary condition. The model can be written as,

H=-t\sum_{ i}(b_i^\dag b_{i+1}+ h.c.)+\frac{U}{2}\sum_in_i(n_i-1)+V\sum_{i}n_in_{i+1},

According to Ref.[ Phys. Rev. B 61 , 12474(2000), url: https://journals.aps.org/prb/abstract/10.1103/PhysRevB.61.12474], a CDW density profile can be seen at t/U=0.1, V/U=0.4 and particle filling 1/2 (See Fig.6 of the reference).

However, when I reproduce this result with total latice size L=100, I got a different density profile which have attached as following:

1 0.9124231273975183
2 0.14970860238647662
3 0.835638249019661
4 0.1815491194311886
5 0.8095297013017156
6 0.19752402219695384
7 0.7944770447783213
8 0.2084615825914796
9 0.7832714507898253
10 0.2175051554962943
11 0.7735159302715544
12 0.22592959282080677
13 0.76417425961646
14 0.23435322543735432
15 0.754727223902288
16 0.24311001953992215
17 0.7448909450185272
18 0.2523919529973155
19 0.7345033001932816
20 0.26231198650512755
21 0.7234718333265456
22 0.272934943886998
23 0.711747452635697
24 0.28429391711369256
25 0.6993101299072558
26 0.296399593544292
27 0.6861606086111528
28 0.30924584360623236
29 0.6723153101596289
30 0.3228132819701113
31 0.6578030265956872
32 0.33707166280292333
33 0.6426626403870428
34 0.35198159253882744
35 0.6269414507572181
36 0.3674958402693919
37 0.610693870838916
38 0.38356040170281824
39 0.5939803395228962
40 0.40011542338878675
41 0.5768663730939148
42 0.41709603867523465
43 0.5594216975939265
44 0.43443315599188825
45 0.5417194285504348
46 0.45205422269525203
47 0.5238352798074614
48 0.46988397756436084
49 0.5058467863170942
50 0.48784520097806666
51 0.487832538990757
52 0.505859463391281
53 0.4698714252347378
54 0.5238478772132479
55 0.45204187300950827
56 0.5417318525391266
57 0.43442109897398196
58 0.5594338569744906
59 0.4170843591190376
60 0.5768781816435744
61 0.4001041997533515
62 0.5939917167515864
63 0.3835497054720258
64 0.610704742979596
65 0.3674857352808265
66 0.6269517514966265
67 0.35197213376992875
68 0.6426723120061396
69 0.3370628942195659
70 0.6578120223101307
71 0.3228052372354159
72 0.6723235929203218
73 0.3092385450318608
74 0.6861681523639005
75 0.2963930526173842
76 0.6993169197860075
77 0.2842881337282399
78 0.7117534850206948
79 0.2729299062462747
80 0.7234771173360137
81 0.26230767511189923
82 0.734507855885176
83 0.2523883331345254
84 0.7448948006531395
85 0.24310705178269798
86 0.754730417606847
87 0.2343508666590108
88 0.7641768319826925
89 0.2259277883752413
90 0.7735179338028265
91 0.21750384420180302
92 0.7832729462962496
93 0.20846069076218043
94 0.7944780954181354
95 0.1975234371111525
96 0.8095304273224601
97 0.18154881186565536
98 0.8356386748208199
99 0.14970848815911933
100 0.9124233291074241

It shows a site-dependent oscillation ampltudide, which is different with my expection that the oscillation ampltuide should not changed in the bulk. So my question is: Am I missed something or did I make some mistakes? Any suggestions are much more appreciated.

Best,

Chen-Rong

A minimal code is attached.

using ITensors,ITensorMPS

mutable struct DemoObserver <: AbstractObserver
   energy_tol::Float64
   last_energy::Float64

   DemoObserver(energy_tol=0.0) = new(energy_tol,1000.0)
end

function ITensors.checkdone!(o::DemoObserver;kwargs...)
  sw = kwargs[:sweep]
  energy = kwargs[:energy]
  if abs(energy-o.last_energy) < o.energy_tol
    println("Stopping DMRG after sweep $sw")
    return true
  end
  # Otherwise, update last_energy and keep going
  o.last_energy = energy
  return false
end

d=6

function ITensors.op(::OpName"N^2", ::SiteType"Boson", d::Int;)
  o = zeros(d, d)
  o[2, 2] = 1
  o[3, 3] = 4
  o[4, 4] = 9
  o[5, 5] = 16
  o[6, 6] = 25
  return o
end

  include(get(ARGS, 1, "input.jl"))
  
  sweeps = Sweeps(nsweep, sweeps_args)


  sites = siteinds("Boson", N;conserve_qns=true,dim=6)
 

  os = OpSum()

  for b in 1:(N - 1)
    os .+= -Jb, "Adag", b, "A", b + 1
    os .+= -Jb, "A", b, "Adag", b + 1
  end

  for i in 1:N
    os .+= Ub/2, "N^2", i
    os .+= -Ub/2, "N", i
  end

  for i in 1:N-1
    os .+= V, "N", i,"N", i+1
  end

  H = MPO(os, sites)
   
  state=[isodd(n) ? "0" : "1" for n in 1:N ]
        
  psi0 = MPS(sites, state)

  # Check total number of particles:
  @show flux(psi0)

  obs = DemoObserver(etol)

  # Start DMRG calculation:
  energy, psi = dmrg(H, psi0,sweeps,observer=obs)

  nmea = expect(psi, "N")

  println("Density:")
  for j in 1:N
    println("$j $(nmea[j])")
  end
  println()
  println("\nGround State Energy = $energy")

The input file is,

etol = 1E-11
N = 100
Jb = 0.1
Ub = 1.0
V = 0.4
nsweep = 800
sweeps_args = [
  "maxdim" "mindim" "cutoff" "noise"
  500 20 1e-12 1e-6
  500 20 1e-12 1e-6
  1000 20 1e-12 1e-6
  1000 20 1e-12 1e-6
  1000 20 1e-12 1e-6
  1000 20 1e-12 1e-8
  1800 20 1e-12 1e-8
  1800 20 1e-12 1e-8
  1800 20 1e-12 1e-8
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
  1800 20 1e-12 0
 ]

Hi Chen-Rong,
Did you compute your results for the exact same system as in the paper, or does your system have finite size effects?

Also as a tip about DMRG, it’s better to start the maxdim out small (say 20) for the first 10 sweeps then raise it by doubling it every sweep. Taking too large of a maxdim at the beginning can actually make convergence slower.

Hi, miles
Thanks for your reply. I have ckecked by using the total lattice size L=256,which is exactly the same as the paper used. Unfortunately, I got the same unexpected density profile as attached.

flux(psi0) = QN("Number",128)
After sweep 1 energy=-6.97734800618197  maxlinkdim=20 maxerr=7.65E-08 time=40.493
After sweep 2 energy=-7.0096725913124  maxlinkdim=20 maxerr=4.23E-07 time=6.165
After sweep 3 energy=-7.018344444702471  maxlinkdim=20 maxerr=3.57E-06 time=6.614
After sweep 4 energy=-7.022652122231355  maxlinkdim=20 maxerr=3.95E-06 time=6.848
After sweep 5 energy=-7.023986659776237  maxlinkdim=20 maxerr=3.35E-06 time=6.654
After sweep 6 energy=-7.0245412423966  maxlinkdim=20 maxerr=3.85E-06 time=6.633
After sweep 7 energy=-7.024826388453542  maxlinkdim=20 maxerr=2.16E-06 time=6.448
After sweep 8 energy=-7.0249989743332275  maxlinkdim=20 maxerr=2.10E-06 time=6.360
After sweep 9 energy=-7.025111758369314  maxlinkdim=20 maxerr=2.07E-06 time=6.788
After sweep 10 energy=-7.025188915369933  maxlinkdim=20 maxerr=2.02E-06 time=5.518
After sweep 11 energy=-7.0255966316660965  maxlinkdim=40 maxerr=3.76E-08 time=8.884
After sweep 12 energy=-7.025775747958985  maxlinkdim=80 maxerr=6.00E-10 time=15.935
After sweep 13 energy=-7.0258977060132  maxlinkdim=160 maxerr=2.27E-11 time=30.800
After sweep 14 energy=-7.025952135741316  maxlinkdim=264 maxerr=1.00E-12 time=43.746
After sweep 15 energy=-7.025969654165558  maxlinkdim=249 maxerr=1.00E-12 time=47.375
After sweep 16 energy=-7.025978817630631  maxlinkdim=311 maxerr=1.00E-12 time=49.985
After sweep 17 energy=-7.025983456180911  maxlinkdim=261 maxerr=1.00E-12 time=51.879
After sweep 18 energy=-7.0259861683280915  maxlinkdim=254 maxerr=1.00E-12 time=52.251
After sweep 19 energy=-7.025987682281324  maxlinkdim=264 maxerr=1.00E-12 time=49.819
After sweep 20 energy=-7.025988340391939  maxlinkdim=342 maxerr=1.00E-12 time=48.496
After sweep 21 energy=-7.025988612496094  maxlinkdim=292 maxerr=1.00E-12 time=51.484
After sweep 22 energy=-7.025988727468241  maxlinkdim=316 maxerr=1.00E-12 time=53.808
After sweep 23 energy=-7.025988764092085  maxlinkdim=291 maxerr=1.00E-12 time=48.775
After sweep 24 energy=-7.0259887733102415  maxlinkdim=257 maxerr=1.00E-12 time=41.383
After sweep 25 energy=-7.025988775862886  maxlinkdim=223 maxerr=1.00E-12 time=39.004
After sweep 26 energy=-7.025988776781935  maxlinkdim=208 maxerr=1.00E-12 time=37.483
After sweep 27 energy=-7.025988777165249  maxlinkdim=206 maxerr=1.00E-12 time=36.659
After sweep 28 energy=-7.025988777328804  maxlinkdim=203 maxerr=1.00E-12 time=36.137
After sweep 29 energy=-7.025988777398236  maxlinkdim=202 maxerr=1.00E-12 time=35.375
After sweep 30 energy=-7.025988777428969  maxlinkdim=202 maxerr=1.00E-12 time=36.116
After sweep 31 energy=-7.0259887774426435  maxlinkdim=202 maxerr=1.00E-12 time=36.477
After sweep 32 energy=-7.025988777449608  maxlinkdim=202 maxerr=1.00E-12 time=36.100
Stopping DMRG after sweep 32
Density:
1 0.9144781799158436
2 0.14857689317390407
3 0.8399954084832949
4 0.17847878057425598
5 0.816856440555847
6 0.19175925628858378
7 0.8055071620455005
8 0.19924409925720465
9 0.7987661280576904
10 0.20406614175460794
11 0.7942517440036581
12 0.2074904497860221
13 0.7909357569820888
14 0.2101289575226371
15 0.7883003909592352
16 0.21231395732907968
17 0.7860568360376484
18 0.21424120945417208
19 0.7840316443473169
20 0.2160333554864192
21 0.7821145964820474
22 0.2177710558009688
23 0.7802324081896461
24 0.21950954196019515
25 0.778334480310938
26 0.2212879450201511
27 0.7763847421425732
28 0.22313482780958305
29 0.7743567570150534
30 0.22507158995981488
31 0.7722306698403775
32 0.22711463566154289
33 0.7699912529243896
34 0.22927679423992434
35 0.7676266119275965
36 0.23156827513772557
37 0.765127316447671
38 0.23399731365162246
39 0.762485804395679
40 0.23657062536728024
41 0.7596959608827698
42 0.23929372168647095
43 0.756752824913302
44 0.2421711405111187
45 0.753652375758434
46 0.2452066101427964
47 0.7503913775013051
48 0.2484031700323615
49 0.7469672680491073
50 0.2517632602875624
51 0.7433780708489091
52 0.25528878746045486
53 0.7396223357935177
54 0.25898117175824836
55 0.7356990904278774
56 0.2628413910467292
57 0.7316078031313117
58 0.26687000228501634
59 0.727348354241643
60 0.27106717035526084
61 0.7229210145315401
62 0.27543268392282727
63 0.718326427364524
64 0.27996596941449436
65 0.7135655931162619
66 0.28466610393874153
67 0.7086398581636444
68 0.2895318252564729
69 0.7035509033118471
70 0.2945615406382224
71 0.6983007337113304
72 0.29975333557189726
73 0.6928916712375696
74 0.3051049816999902
75 0.6873263445862952
76 0.31061394354459376
77 0.6816076833018154
78 0.31627738618502244
79 0.6757389084255405
80 0.3220921825955643
81 0.6697235246914465
82 0.32805492114075646
83 0.6635653127616447
84 0.3341619129944573
85 0.6572683209379584
86 0.340409199856831
87 0.6508368568279602
88 0.3467925622580631
89 0.644275478529024
90 0.3533075278890934
91 0.6375889854115757
92 0.35994938045882696
93 0.6307824093291329
94 0.36671316844000756
95 0.6238610042470892
96 0.3735937150385944
97 0.6168302366007646
98 0.38058562769041504
99 0.6096957747776531
100 0.3876833085320761
101 0.6024634787365734
102 0.39488096444367715
103 0.5951393888264866
104 0.4021726179642091
105 0.58772971480575
106 0.40955211842498945
107 0.5802408241855629
108 0.41701315340863954
109 0.5726792302968663
110 0.4245492602933676
111 0.5650515803686252
112 0.43215383859504186
113 0.5573646432670062
114 0.4398201614731371
115 0.5496252968902119
116 0.4475413887484342
117 0.5418405155893367
118 0.4553105791846271
119 0.5340173574243835
120 0.46312070323877275
121 0.5261629508864208
122 0.47096465627707956
123 0.5182844820285638
124 0.47883527137635634
125 0.510389181072235
126 0.4867253326707277
127 0.5024843092083799
128 0.49462758856597416
129 0.4945771452680555
130 0.5025347650426928
131 0.4866749720847819
132 0.5104395791148927
133 0.4787850636212427
134 0.5183347521046446
135 0.47091467087098215
136 0.5262130232902127
137 0.4630710090307128
138 0.5340671630668109
139 0.45526124406000296
140 0.541889986164655
141 0.4474924796316565
142 0.5496743651116617
143 0.4397717439191197
144 0.5574132430920474
145 0.432105976398321
146 0.5650996474836659
147 0.4245020156982993
148 0.5727267017420381
149 0.4169665867912244
150 0.5802876388207517
151 0.4095062881612019
152 0.5877758135478056
153 0.40212758010672944
154 0.5951847147843414
155 0.3948367725541015
156 0.6025079775600327
157 0.3876400133884076
158 0.6097393947709748
159 0.38054327734038
160 0.6168729286556665
161 0.37355235463180414
162 0.6239027221943463
163 0.36667284022058666
164 0.6308231098078922
165 0.3599101235520537
166 0.6376286282421747
167 0.35326937808672476
168 0.6443140267063502
169 0.3467555517805396
170 0.6508742770086681
171 0.34037335752075254
172 0.6573045830377253
173 0.3341272641512001
174 0.6636003902217719
175 0.32802148768721134
176 0.6697573944266448
177 0.32205998284824444
178 0.6757715507810842
179 0.31624643499889404
180 0.6816390821124428
181 0.31058425229584763
182 0.6873564871213672
183 0.305076558094169
184 0.6929205485385108
185 0.29972618358222297
186 0.698328340888596
187 0.2945356604094036
188 0.7035772385483355
189 0.2895072136755741
190 0.7086649235107104
191 0.28464275422582486
192 0.7135893938681205
193 0.27994387109405894
194 0.718348972604359
195 0.2754118231860703
196 0.7229423171533311
197 0.27104753039064744
198 0.7273684298752804
199 0.2668515630874657
200 0.7316266707178828
201 0.2628241301720779
202 0.7357167717299116
203 0.2589650643841508
204 0.7396388551261964
205 0.2552738043543593
206 0.7433934553916266
207 0.2517493716340735
208 0.746981547941453
209 0.24839034221688422
210 0.7504045853266277
211 0.24519480789656267
212 0.7536645449600315
213 0.24216032710863492
214 0.7567639923063817
215 0.23928385853949222
216 0.7597061647387409
217 0.23656167192692115
218 0.76249508499949
219 0.23398922787194298
220 0.7651357157269382
221 0.23156101300806148
222 0.7676341721382075
223 0.22927031183908142
224 0.7699980180756021
225 0.22710888843339438
226 0.7722366837427932
227 0.22506653432836926
228 0.7743620638813244
229 0.22313041770394765
230 0.776389388337214
231 0.22128413293768687
232 0.7783385121071437
233 0.21950628127548713
234 0.7802358734266807
235 0.21776830116726684
236 0.7821175416276598
237 0.2160310611167269
238 0.7840341129071448
239 0.21423933156445238
240 0.7860588740634631
241 0.21231244994196855
242 0.7883020441897564
243 0.21012777916454253
244 0.7909370669121948
245 0.20748955714662168
246 0.7942527538913544
247 0.20406549586616454
248 0.798766879493325
249 0.19924365860644094
250 0.8055076934281016
251 0.1917589788424818
252 0.8168567961893652
253 0.17847863353422275
254 0.8399956193756102
255 0.1485768389685957
256 0.9144782796570398


Ground State Energy = -7.025988777449608

I see. If you believe that you are simulating the same system as in the paper, then logically there are only 3 possibilities:

  1. the results in the paper are wrong, or you may be misunderstanding what system they were for (e.g. different boundary conditions, different Hamiltonian)
  2. there could be a mistake or bug in the definition of your Hamiltonian
  3. your DMRG calculation might not be converged

Regarding #3 about convergence, we have an FAQ here that may be helpful to you:
https://itensor.github.io/ITensors.jl/dev/faq/DMRG.html

Hi, miles
Thanks for the reminder. Your #1 point is right, I carefully read their paper again and find that they add a additional term at the two boundary sites to reduce the boundary effect. After I do this in my code, I can reproduce the results exactly as I want.

1 Like

Glad you found the issue and that it works now!

This topic was automatically closed 10 days after the last reply. New replies are no longer allowed.