I'm trying to create a hump-like density profile in a spinless 1D Fermi-Hubbard model using DMRG engine.
To do so I'm using a standard FermiHubbardModel class in TenPy and adding an onsite potential V_i*n_i at each site i=1,...,N, where V_i is the external potential with the Gaussian shape, V(x) = -A*exp(-(x-x0)^2/sigma^2).
Then I run DMRG engine and find the ground state of the model. To be concrete, I am considering Fermi-Hubbard model near filling nu=N_fermions/N_sites=0.1.
Although this approach sometimes works I found somewhat strange behaviour (which is also related to the choice of conserved quantum numbers).
(1) If I set the DMRG engine parameter to conserve=None and try to adjust chemical potential mu, then below certain critical value of mu=mu_c the DMRG converges to a state with density=0. While I decrease the chemical potential continuously in order to reach the desired background filling factor=0.1, the density in the DMRG solution at large distances jumps from a finite value=0.3 at some mu=mu_c, to exact zero at mu<mu_c at all lattice sites. So the DMRG solution contains zero fermions.
I suspect there is some sort of leakage from the sector with a given total number of fermions to a sector with zero fermions.
(2) In order to fight the 'leakage' problem I set conserve='N' (or conserve='best') to enforce particle conservation.
Then I initialize my initial wave function as a bitstring [0..0011..11], so that the total number of fermions corresponds to the desired fermion density=0.1. Next I run DMRG engine to find the ground state.
The density profile that I obtain with this method has some unphysical 'ripples' at large distances, see Fig. attached, The ripples persist even if the I set interaction term in Fermi Hubbard mode to zero, U=0.
I tried to change parameters of DMRG engine and change number of fermions in the initial bitstring, but the problem still persists.
I use infinite MPS boundary condition when initialize FermiHubbardModel.
The values of other parameters of DMRG engine are listed below:
Code: Select all
dmrg_params = {
'mixer': True,
'max_E_err': 1.e-10,
'trunc_params': {
'chi_max': 50,
'svd_min': 1e-16
},
'verbose': False,
'combine': True,
'max_sweeps': 20
}
Thanks!