Two-componente Bose-Hubbard (each species conserving number)

Hi! Probably a very basic issue, but I haven’t been able to solve a (balanced) two-component Bose-Hubbard model:

\hat{H}=-t\sum_{\sigma=A,B}\sum_i\left(\hat{a}^\dag_{\sigma,i}\hat{a}_{\sigma,i+1}+h.c.\right)+\frac{U}{2}\sum_{\sigma=A,B}\sum_i \hat{n}_{\sigma,i}\left(\hat{n}_{\sigma,i}-1\right)+U_{AB}\sum_i \hat{n}_{A,i}\hat{n}_{B,i}

with soft-core bosons and a fixed (and say equal) number of bosons of each species N=N_A=N_B (total N_A+N_B conserved number of particles has been asked before).

For a lattice with M=5 sites and N=M particles of each species, my current code is

using ITensors

let
  M = 5
  U = 1.0
  UAB = 0.0
  t = 1.0

  sites = [isodd(n) ? siteind("Boson", n; dim=M+1, conserve_qns=true, qnname_number="Number_odd") : siteind("Boson", n; dim=M+1, conserve_qns=true, qnname_number="Number_even") for n in 1:2*M]

  os = OpSum()

  for i in 1:M
    # Interaction AA
    os += - 0.5*U, "N", 2*i-1
    os += 0.5*U, "N", 2*i-1, "N", 2*i-1
    # Interaction BB
    os += - 0.5*U, "N", 2*i
    os += 0.5*U, "N", 2*i, "N", 2*i
    # Interaction AB
    os += UAB, "N", 2*i-1, "N", 2*i
    if i<M
      # Tunneling A
      os += -t, "A", 2*i-1, "Adag", 2*(i+1)-1
      os += -t, "Adag", 2*i-1, "A", 2*(i+1)-1
      # Tunneling B
      os += -t, "A", 2*i, "Adag", 2*(i+1)
      os += -t, "Adag", 2*i, "A", 2*(i+1)
    end
  end

  H = MPO(os, sites)

  states = [ "1" for j in 1:2*M ]

  psi0 = randomMPS(sites,states)

  nsweeps = 5
  maxdim = [10,20,100,100,200]
  cutoff = [1E-10]

  energy, psi = dmrg(H,psi0; nsweeps, maxdim, cutoff)

  println(energy)


  return

end

I have set U_{AB}=0 to check that I recover two uncoupled one-component Bose-Hubbards. However, I simply get vanishing energy (zero error, one bond, etc) in each sweep. Not sure what I am doing wrong. I guess the problem is with the tunneling or with the sites?

Thanks!

1 Like

Without looking at your code, I will add that if you include a noise in your sweeps you’ll get non-zero energy. My guess is that your initial state isn’t good?

1 Like

Yep! That (the lack of noise) was the issue :upside_down_face:. Thanks!

2 Likes

Take a look at the DMRG FAQs for useful information on running DMRG: DMRG FAQs · ITensors.jl

1 Like

I understand that you are doubling the number of sites so that one Half is for the A bosons and the other is for the B bosons. Is there a way to “combine” the sites of the A and B bosons, so that the number of sites would be M again? and if so, is it possible to have operators that only act on the “Number_even” or “Number_odd” population?