Hi all,
I’m trying to study a multi-component Hubbard model, similar to what was asked before here. However, instead of splitting up the sites into a mixed “Electron” space, I’m trying to define a single custom SiteType. Essentially, I’d like to generalise the “Electron” SiteType for additional internal states.
Defining the new SiteType with no QNs and the operators is fairly straightforward. However, I’m struggling to understand how to implement the conservation laws, for example, to conserve the number of fermions of each spin. In particular, in the predefined “Electron” type, I don’t fully understand the following lines:
if conserve_sz && conserve_nf
return [
QN((qnname_nf, 0, -1), (qnname_sz, 0)) => 1
QN((qnname_nf, 1, -1), (qnname_sz, +1)) => 1
QN((qnname_nf, 1, -1), (qnname_sz, -1)) => 1
QN((qnname_nf, 2, -1), (qnname_sz, 0)) => 1
]
elseif conserve_nf
return [
QN(qnname_nf, 0, -1) => 1
QN(qnname_nf, 1, -1) => 2
QN(qnname_nf, 2, -1) => 1
]
elseif conserve_sz
return [
QN((qnname_sz, 0), (qnname_nfparity, 0, -2)) => 1
QN((qnname_sz, +1), (qnname_nfparity, 1, -2)) => 1
QN((qnname_sz, -1), (qnname_nfparity, 1, -2)) => 1
QN((qnname_sz, 0), (qnname_nfparity, 0, -2)) => 1
]
elseif conserve_nfparity
return [
QN(qnname_nfparity, 0, -2) => 1
QN(qnname_nfparity, 1, -2) => 2
QN(qnname_nfparity, 0, -2) => 1
]
end
I think I understand how the conservation of the total number of fermions is implemented, but not the conservation of Sz.
Aren’t the qnname’s just labels? In this sense, why if Sz is conserved QN needs two tuples? And also, what’s the difference between the QNs inside
conserve_sz && conserve_nf and conserve_sz, and between
conserve_nf and conserve_nfparity?
Also, what does the third input in (qnname_nf, _ , -1) and (qnname_nfparity, _, -2) mean [the -1 and -2]?
Thanks!