ITensor team,
I am trying to measure various observables of the extended fermi hubbard model’s ground state in the singlet superconducting phase. I’m having a simple but puzzling problem: DMRG is not converging, and the mps bond dimension is plummeting to 1 after 4 or 5 sweeps. A minimal code example:
using ITensors, ITensorMPS
L = 20
U = -2.0
V = -0.3
t = 1.0
matState = [isodd(i) ? "Up" : "Dn" for i in 1:L]
s = [siteind("Electron", i) for i in 1:L]
psiInit = MPS(s, matState)
function build_hamiltonian(s, L, t, U, V)
os = OpSum()
for j = 1:L-1
os -= t, "c†↑", j, "c↑", j+1
os -= t, "c†↑", j+1, "c↑", j
os -= t, "c†↓", j, "c↓", j+1
os -= t, "c†↓", j+1, "c↓", j
end
for j = 1:L
os += U, "n↑", j, "n↓", j
end
for j = 1:L-1
os += V, "ntot", j, "ntot", j+1
end
return MPO(os, s)
end
H = build_hamiltonian(s, L, t, U, V)
ctf = [1e-16]
maxdim = [8,20,50,100,200,400,400,800]
etol = 1e-14
energy, psiMPS = dmrg(H, psiInit;
maxdim = maxdim,
cutoff = ctf,
nsweeps = 500,
)
Among other things, I’ve tried the previously recommended slowly-increasing sweep routine
maxdim = [2,2,2,2,2,8,8,8,8,8,20,20,20,20,20,50,50,50,50,50,100,100,200,200,400]
introducing noise, a custom observer struct, increasing the krylov dimension, and various initial states. The exact same code also converges nicely for other regions of the same phase diagram.
Thanks in advance for your help!