I am finding a problem with something seemingly very simple. Basically, the following Julia code implements a Hamiltonian that is just Sz on each of N spin-1/2 sites. Clearly the ground state energy is -N/2.
N = 100
sites = siteinds("S=1/2", N)
ampo_H = AutoMPO()
for j = 1:N
add!(ampo_H, 1, "Sz", j)
end
H = MPO(ampo_H, sites)
sweeps = Sweeps(5)
maxdim!(sweeps, 10,20,100,100,200)
cutoff!(sweeps, 1E-10)
init_state = [n % 3 == 0 ? "Up" : "Dn" for n=1:N]
psi0 = productMPS(sites, init_state)
# psi0 = randomMPS(sites)
energy, psi = dmrg(H, psi0, sweeps)
println("Ground state energy = $energy")
However, if you run the code, you will not get a ground state energy of -50. DMRG will simply stay put at an energy of -17, which you may notice is just the energy of the initial state. Feel free to try other deterministic choices of psi0; you should see the same thing happen.
In contrast, if you remove the deterministic choice of psi0 and uncomment the line that says "psi0 = randomMPS(sites)", you should now see that DMRG immediately converges to the right answer, as one would expect.
I know that I have run DMRG on a lattice formulation of the Schwinger model (Kogut-Susskind staggered lattice with Jordan-Wigner transformation and open boundary conditions) with successful results. I used a deterministic initial state for that, and that lattice was also on spin-1/2 sites, so I'm not sure why this one isn't working.
What exactly is going on here? If DMRG is looking for the ground state energy, why should it matter whether the initial state was chosen randomly or deterministically? Any clarification on this would be greatly appreciated.