DMRG different results using SingleSiteEngine and TwoSiteEngine and how to keep certain filling

How do I use this algorithm? What does that parameter do?
dz20
Posts: 1
Joined: 18 Jul 2020, 18:55

DMRG different results using SingleSiteEngine and TwoSiteEngine and how to keep certain filling

Dear TeNPy community:

I have some questions on the different dmrg results using SingleSiteEngine and TwositeEngine, and on how to get dmrg results with certain filling.

For more details,
I am using the dmrg in tenpy to obtain ground state energy for fermi-hubbard model. And in particular I want to get some dmrg results with low bond dimension in order to benchmark and compare with some other optimization results I got.
My setup is as following:

Code: Select all

    model_params = dict(L=2, t=t_value, U=U_value, mu=mu_value, bc_MPS = "infinite", cons_N = 'N', cons_Sz=None, verbose=True)
M = FermiHubbardChain(model_params)
site = SpinHalfFermionSite(cons_N = 'N', cons_Sz = None, filling = 1)
product_state = ["up", "down"] * (M.lat.N_sites // 2)
psi = MPS.from_product_state([site]*M.lat.N_sites, product_state, bc = M.lat.bc_MPS)
dmrg_params = {
'mixer': True,
'trunc_params':{
'chi_max':chi_value,
'svd_min':1.e-12,
},
'max_E_err':1e-12,
'verbose':True,
}
#eng = dmrg.SingleSiteDMRGEngine(psi, M, dmrg_params)
eng = dmrg.TwoSiteDMRGEngine(psi, M, dmrg_params)
E, psi = eng.run()
Now I have two questions:

First, I noticed that for low bond dimension, I got different results between using SingleSiteEngine and TwoSiteEngine. For example, for bond dimension = 4, and t = 1, U =8, I got E = -0.209 using two site engine and E = -0.29 using single site engine. I am not sure which result is correct. I also noticed that in the doc it says two site engine sometimes have convergence issue, I am wondering whether this discrepancy is related that and if it is, whether there is some way to fix that (make sure get reasonable results using TwoSiteEngine).

Second, I am wondering how to use dmrg to get ground energy for certain filling. For example, for half-filling, previously I thought using cons_N = 'N' will enforce the half-filling for dmrg results, I checked by print out

Code: Select all

psi.expectation_value("Ntot")
, and saw though in most case it is half-filling, there are also exceptions, for example using TwositeEngine for t=1,U=1 it gives

Code: Select all

psi.expectation_value("Ntot") = [1.02346393 0.97653607]
, which is different from the desired half-filling [1, 1]; and in general SingleSiteEngine gets more results away from half filling than TwoSiteEngine.
So I am wondering if there any parameters to set/any ways to get the dmrg results with certain filling, for example half-filling or in general any filling.

Johannes
Posts: 179
Joined: 21 Jul 2018, 12:52
Location: UC Berkeley

Re: DMRG different results using SingleSiteEngine and TwoSiteEngine and how to keep certain filling

Imposing a small bond dimension has slightly different effects on single-site vs. two-site DMRG.
Take the extreme case of chi=1, in which case single-site DMRG (without a mixer) effectively does mean-field theory for a single site in an environment, while two-site dmrg finds the ground state of two sites embedded in the environment and then projects it to a product state; this can clearly give different results.
You can view the projection to small bond dimension as a perturbation to the hamiltonian that is slightly different for single vs two-site DMRG.

The charge conservation imposes only the average charge per MPS unit cell, but not on each site. Indeed, if you sum up the two density values, you get the total charge of 1.02346393 + 0.97653607 = 2.0 electrons per two sites, which is half filling.
The state you obtained spontaneously breaks translation invariance and is a "charge density wave". I know that those states are commonly encountered for the Hubbard model, but I'm not sure if you'd expect it in the 1D case for those parameters.
Since this state requires strong correlation (for which you need larger bond dimensions), I'm also not too surprised that two-site DMRG favors it more than single-site DMRG

Regarding convergence: With SingleSiteDMRG you need to be very careful about the mixer parameters. If they are chosen poorly, TwoSiteDMRG will do better...