I'm interested in properties of a state in the Bose Hubbard model at different values of the chemical potential. To speed up the computation, my thought was to set the chemical potential, run dmrg and find the ground state, read out the expected filling, then construct a new state with that filling and turn on particle number conservation. This only works if conserve = None, though. If
conserve = "N"
, then the expectation value of the particle number is always 0.0 at each site (the below code replicates what I'm talking about; if you change conserve = None
on the first line, then the filling is 0.5. Is there a way to, once I know the particle number corresponding to a certain chemical potential, shift to particle number conservation to speed up programs? Code: Select all
M = BoseHubbardModel(dict(n_max=1, L = 4, conserve = "N"))
localwf = np.array([1.0,1.0])
localwf = localwf / np.linalg.norm(localwf)
pstate = [localwf] * 4
psi = MPS.from_product_state(M.lat.mps_sites(), pstate, M.lat.bc_MPS)
print(psi.expectation_value("N"))