Hi,everyone, I have a question related to using QN in DMRG.

I am dealing with a model with (spinless) electrons and holes living independently on the 1D lattice. More specifically, say a lattice with N=10 sites, with Ne electrons(Ne =1 , … , N) and Nh holes (Nh = 1 , … , N), electrons and holes can share a lattice site. So the local Hilbert space is 4. Here, I want to constrain the number of electrons and holes during optimization, that is Ne and Nh are all fixed during optimization.

Can I re-intepretate the above QN-DMRG problem in the following way : take the Electron Sitetype, the local Hibert space is also 4. Here I regard the spin-up as electron and the spin-down as hole. So, the conservation of Ne and Nh is converted to the conservation of electron number(conserve_nf=true) and total Sz(conserve_sz=true).

This correspondence seems obvious but I am not sure it’s correct or not, since I don’t know much about the underlying implementation of QN-conserving DMRG.

Hi JianGang,
Thanks for the question. I’d say for the first part of your question, about whether the interpretation you describe would be correct for the model you want to simulate, is less of a DMRG or ITensor question and more of a theoretical question that you would need to determine in terms of defining your problem.

Maybe I can help, though, by describing what the QN conservation in ITensor DMRG does though, specifically for the Electron site type. For that site type, if you give DMRG an initial state that has N_e electrons (that is \sum_j \langle \hat N \rangle = N_e) whose total S^z adds up to M (that is, \sum_j \langle \hat S^z_j \rangle = M) then throughout the entire DMRG calculation and after those two quantites (total number of electrons and total S^z) will maintain precisely those same values (N_e and M).

You can even check before and after the calculation by calling sum(expect(psi,"N")) and sum(expect(psi,"Sz")) what these values are and that they remain the same before and after.

So then if you are correct about just needing to keep track of electrons only, and that implying a certain number of holes, then it sounds like our QN conservation system will be what you need.

Finally, without having thought about it too carefully or fully understanding your problem, it does seem to me that you would only need to know about the number of electrons in your problem, given that you will be conserving electron number and working on a finite system. Then the number of holes would automatically also be conserved, since there is a fixed number of electrons total in your finite system.

Oh and you can always test your ideas out on some small systems or on a non-interacting or exactly solvable limit, say, where you know what the answer should be. That’s an important step when trying a new type of calculation.

Hi miles, thanks for your kind reply, I really appreciate that !

I think I would first clarify the meaning of “holes” in my context. Imagine that one layer of holes and one layer of electrons stack together and somehow form a 1D chain. I mean, in this context, holes and electrons are not mutually exclusive, they can live independently and anti-commute with each other mathematically.

So my goal is to conserve Ne and Nh respectively during optimization, that is, U(1) \times U(1) symmetry.

Therefore, my question is : Do I have to define a custom local Hilbert space to fulfill my goal ? Or can I just take Electron SiteType which is already implemented , and conserve total electron number( Ne+Nh in my context) and total spin( Ne-Nh in my context) as I described before?

I don’t think I can fully answer your question without seeing a more detailed mathematical definition of the system you are interested in simulating. One thing I’m not sure of regarding your system: if a hole moves onto a site with some number of electrons, does the number of electrons on that site go down? Or does it have the same number of electrons and now an extra hole additionally? Note that this is not an ITensor or DMRG question per se, but rather just a mathematical question about the Hilbert space of your system and how you are definition your operators, Hamiltonian, etc.

Separately from this, yes it is definitely possible and not hard to set up a new site type that conserves two different U(1) symmetries. We already have a certain amount of tutorial material on defining new site types here: https://itensor.github.io/ITensors.jl/stable/examples/Physics.html#Make-a-Custom-Local-Hilbert-Space-with-QNs
In that example, the Sz quantum number is actually a type of U(1) quantum number (just with the name "Sz").

To define two U(1) quantum numbers within a QN object, you can do it by writing code like this: QN("A",na, "B", nb) where “A” and “B” are just strings that can be anything you want (the names of the quantum numbers) and na, nb are integer values.

it will have the same number of electrons and now an extra hole additionally.

But I think I will try both methods （ define custom sitetype as well as try the Electron SiteType ）and check whether they will give the same results. I will come back and leave a comment after I get the results.

I see - great. That clarifies things for me. I think your safest bet is therefore to define a new site type which has two U(1) “particle” numbers and additionally a spin quantum number (you will need to work out what is the total spin of each of the states you want to represent on the site).

Good idea to try it two ways and check if you get the same results. Also if there’s a non-interacting or exactly solvable limit (or solvable by another numerical method like exact diagonalization or QMC) then that’s a really good thing to compare against.