Initial product states

How do I use this algorithm? What does that parameter do?
Post Reply
steven_tao
Posts: 13
Joined: 11 Mar 2020, 01:07

Initial product states

Post by steven_tao »

Dear TeNPy members:

I am asking how to set the initial product state for the DMRG simulation. For example, if we consider the following spin-1/2 1D Fermi-Hubbard chain:

\(H = \sum_{i, \sigma} c_{i, \sigma}^\dagger c_{i+1, \sigma} + c_{i+1, \sigma}^\dagger c_{i, \sigma} + \sum_i n_{i,\uparrow} n_{i,\downarrow} \)

If we consider half-filling, we can set the initial product state as

Code: Select all

product_state = ["up", "down"] * (M.lat.N_sites//2)
psi = MPS.from_product_state(M.lat.mps_sites(), product_state, bc=M.lat.bc_MPS)
1. But how we set the initial product state for the case of half-filling plus one spin up , i.e., \(N_{\uparrow} = L/2 + 1,~ N_{\downarrow} = L/2\) ?

2. How we set the initial product state where each site is the superposition of spin up and spin down ?
User avatar
Johannes
Site Admin
Posts: 413
Joined: 21 Jul 2018, 12:52
Location: TU Munich

Re: Initial product states

Post by Johannes »

  1. Having one more up than down electron can only work if you have an odd number of sites.
    Then you can do, e.g,

    Code: Select all

    initial_state = ["up", "down"] * (M.lat.N_sites // 2)
    initial_state.append("up")
    
    If you have an even number of sites and want two more up than down electrons,

    Code: Select all

    initial_state = ["up", "down"] * (M.lat.N_sites // 2)
    initial_state[1] = "up"  # for some index where there is a "down" before
    
    For an infinite MPS, that is not possible, because you can only change the filling density,
    and one extra electron in an infinite system is a vanishing density.
    You can chose a larger unit cell size (e.g L=11) and have e.g. 6 up and 5 down spins.
  2. If you want to use charge conservation, your state has to have a fixed particle number (of up spins), and this is not possible with a pure product state, since that wouldn't have a well defined number of up/down spins, see this discussion.
    Initializing singlets with from_singlets should still work and have well defined particle numbers, but is probably not what you want...
Post Reply