Mixed site set with conserved total quantum number

, ,

Hi there!

I have a question about Mixed state that involve electrons and spin-1/2. I have a system with electrons and one spin-1/2. I would like to conserve fermion parity for electrons only and for the whole system z component of total spin S^z_{tot}= S_{el}^z + S_{S=1/2}^z.

When setting conserve_sz = true separately for electrons and S=1/2 site , does the code conserve Sz for each of these sectors separately or it coserves total Sz of the whole system?

This is how I define sites and then to fix Sz sector I initialise the MPS with corresponding spin configuration, but I am not sure if this conserves total_sz, at least when I later evolve my state with the Hamiltonian there is no difference between “conserved_sz = true” and “conserved_sz = false” cases.


  function create_sites(N)
    sites = Vector{Index}(undef,N)
    Nimp = Int64((N+1)/2)
    for n=1:N
      if n < Nimp || n > Nimp
        sites[n] = siteind("Electron"; addtags="n=$n",conserve_nfparity=true, conserve_sz = true)
      else
        sites[n] = siteind("S=1/2"; addtags="n=$n",conserve_sz = true)
      end
    end
    return sites, Nimp
  end  

Thanks in advance!

It’s a good question.

  1. First, a small Julia thing is that instead of writing Int((N+1)/2) what you are really trying to do there is integer division. For this you can use the ÷ operator (type \div then hit tab to make this) or you can call div(N+1,2) to call the same function.

  2. Then, to your Sz question, the way our system works is that quantum numbers are given names which are strings such as “NfParity” and “Sz”. When you set conserve_sz=true in each siteinds call, our system defaults to using the name “Sz” for both the “S=1/2” and “Electron” site types. So then these two sources of Sz will be treated the same and allowed to mix together, with the result that only the total Sz = Sz_electron + Sz_spin will be conserved, not separately.

A good way to check what quantum numbers have been associated to your sites (degrees of freedom) is to print out some of the site indices. When I do this with your above code I get a printout like:

(dim=4|id=157|"Electron,Site,n=3") <Out>
 1: QN(("NfParity",0,-2),("Sz",0)) => 1
 2: QN(("NfParity",1,-2),("Sz",1)) => 1
 3: QN(("NfParity",1,-2),("Sz",-1)) => 1
 4: QN(("NfParity",0,-2),("Sz",0)) => 1
(dim=4|id=480|"Electron,Site,n=4") <Out>
 1: QN(("NfParity",0,-2),("Sz",0)) => 1
 2: QN(("NfParity",1,-2),("Sz",1)) => 1
 3: QN(("NfParity",1,-2),("Sz",-1)) => 1
 4: QN(("NfParity",0,-2),("Sz",0)) => 1
(dim=2|id=179|"S=1/2,Site,n=5") <Out>
 1: QN("Sz",1) => 1
 2: QN("Sz",-1) => 1
(dim=4|id=785|"Electron,Site,n=6") <Out>
 1: QN(("NfParity",0,-2),("Sz",0)) => 1
 2: QN(("NfParity",1,-2),("Sz",1)) => 1
 3: QN(("NfParity",1,-2),("Sz",-1)) => 1
 4: QN(("NfParity",0,-2),("Sz",0)) => 1

And from the above you can see that the spin site and electron site both contain spin quantum numbers with the same name of “Sz”, so those will be conserved only in total, and not separately.

If you did however want to conserve them separately, we have optional keywords that let you customize the name of the quantum numbers. Let me know if you want to do that, otherwise you should be good to go.

This topic was automatically closed 10 days after the last reply. New replies are no longer allowed.