Bond dimension is not increasing

How do I use this algorithm? What does that parameter do?
Post Reply
gopal
Posts: 6
Joined: 20 Sep 2020, 16:43

Bond dimension is not increasing

Post by gopal »

Hi everyone,
I am very new to Tensor Network as well as TenPy. I was trying to implement Bose-Hubbard model in a 2-leg ladder finite system, where there is tunnelling tt in between two leg. For that I have added this "self.add_coupling(-tt,0,'Bd',1,'B',0,plus_hc=True) " in the BoseHubbardModel . I hope this is fine. The challenge I face is that the bond-dimension is not increasing while performing the dmrg. "final bond dimensions: [1, 1, 1, 1, 1, 1, 1]"

Also the energy it calculates depends on the p_state I choose. My guess is that I don't understand how to choose p_state in this case or I am missing something important for this twoSiteDMRG.
Thanking you in advance.

Code: Select all

from tenpy.networks.mps import MPS
from tenpy.networks.site import BosonSite
from tenpy.models.hubbard import BoseHubbardModel
from tenpy.models.lattice import Ladder
from tenpy.algorithms import dmrg
boson=BosonSite()
ladder_i=Ladder(4,[boson,boson])
model_params = dict(lattice="Ladder", L=4, t=1,tt=0, U=1, V=5,n_max=1, filling=1/2, bc_MPS="finite", verbose= 1)

M = BoseHubbardModel(model_params)

p_state=[[1,1],[1,1],[1,1],[1,1]]
psi = MPS.from_lat_product_state(ladder_i, p_state)

dmrg_params = {"max_sweeps":50,"trunc_params": {"chi_max": 50, "svd_min": 1.e-10}}
dmrg.run(psi, M, dmrg_params) # find the ground state 
print(psi.expectation_value("N"))

print("final bond dimensions: ", psi.chi)
~
User avatar
Johannes
Site Admin
Posts: 413
Joined: 21 Jul 2018, 12:52
Location: TU Munich

Re: Bond dimension is not increasing

Post by Johannes »

You set n_max=1, i.e. you consider hard-core bosons with at most 1 particle per site, and the model has particle number conservation.
The product state from which you initialize is completely filled with one particle per site, such that the hopping term can't contribute - it would create one hole and one double-occupied site. Try starting with half filling, e.g. by filling only one of the ladders (as long as \((-t-tt) \neq 0\) to avoid that the particle number on the individual chains is preserved).

Code: Select all

p_state=[[1,0]]*L
PS: Note that the hopping between the rungs will be of strength \((-t -tt)\), since the plain nearest-neighbor hopping includes the hopping along the ladder rungs.
Post Reply