Hi there,
Recently I ran some DMRG calculations of a basic 2D Hubbard model with NN hopping and some onsite interaction, namely
H = \sum_{\langle i, j\rangle} c^{\uparrow}_i c^{\uparrow\dagger}_j + c^{\downarrow}_i c^{\downarrow\dagger}_j + h.c. +U\sum_i \hat{n_i }^{\uparrow \downarrow}
In practice, I’ve found that the DMRG algorithm, starting from a random guess of a product state with QN conservation, results in extremely slow convergences ( >300 sweeps and still not close to convergence). So I looked to the Gaussian MPS algorithm implemented in iTensor, and with my code
# we assume a Lx * Ly, 2D square lattice, Ltotal = Lx * Ly
# single particle H
H = zeros((Ltotal, Ltotal))
#hopping
for i = 1:Ltotal
# util function to get the nearest neighbor from certain order and geometry
nns = get_nn(i, L)
for nn in nns
r = distance(i, nn)
hop = hopping(decay, r)
H[i, nn] = -t * hop
H[nn, i] = -t * hop
end
end
@show ishermitian(H)
_, u = eigen(H)
# Get the Slater determinant
# Create an mps for the free fermion ground state
# N = [Nup, Ndn] is the configuration
@show N
ϕup = u[:, 1:N[1]]
ϕdn = u[:, 1:N[2]]
ψ0 = slater_determinant_to_mps(sites, ϕup, ϕdn)
return ψ0
Since up and down electrons have no interaction in the free electron case, I use the same H for both.
However, the initial state guess generated this way seem to be a lot worse than the random guess, and I’ve seen bizarre behavior of the DMRG solver, such as energy actually going up during sweeps.
I wonder if there’s something wrong with the way I generate these initial states, or the Gaussian MPS is only strictly applicable to 1D states.
Thanks in advance