Hey Miles, thanks for responding.
I mean to say that I want to construct operators labelled by spin (up/down) and psuedo-spin(A/B), for example, CupA, which destroys a fermion of type spin-up with psuedo-spin A. I don't actually care about preserving the SU(2) symmetry of the spins nor the pseudo-spin; in fact, I don't care about preserving the U(1) subgroups either, only total particle number.
I think I found a quick-n-easy solution to my problem: doubling the number of sites, and letting the even sites represent A-type fermions and the odd represent B-type. So long as the Hamiltonian is written in a way which takes this into account, I think everything should work as I hoped.
I've also tried rewriting the iTensor hubbard.h to include an additional quantum number. I noticed that in hubbard.h, if conserveSz==false, then the value Sz=0 was stored for every QN() function in the definition the the IQIndex. So I assume that if I want to introduce another quantum number label, but don't care to conserve that quantum number, then I could do something like:
s = IQIndex{nameint("site=",n),
Index(nameint("Emp ",n),1,Site), QN("Tz=",0,"Sz=", 0,"Nf=",0),
Index(nameint("UpA ",n),1,Site), QN("Tz=",0,"Sz=",Up,"Nf=",1),
Index(nameint("UpB ",n),1,Site), QN("Tz=",0,"Sz=",Up,"Nf=",1),
Index(nameint("DnA ",n),1,Site), QN("Tz=",0,"Sz=",Dn,"Nf=",1),
Index(nameint("DnB ",n),1,Site), QN("Tz=",0,"Sz=",Dn,"Nf=",1),
Index(nameint("UpAUpB ",n),1,Site), QN("Tz=",0,"Sz=", 2*Up,"Nf=",2),
Index(nameint("UpADnB ",n),1,Site), QN("Tz=",0,"Sz=", 0,"Nf=",2),
Index(nameint("DnAUpB ",n),1,Site), QN("Tz=",0,"Sz=", 0,"Nf=",2),
Index(nameint("DnADnB ",n),1,Site), QN("Tz=",0,"Sz=", 2*Dn,"Nf=",2)};
Where I introduced a new basis for states at a site, and set my new QN("Tz=0",0). Further defining how each newly defined operator acts in this basis, for example:
IQTensor Op(dag(s),sP);
if(opname == "CupA")
{Op.set(UpA,EmP,1);
Op.set(UpAUpB,UpBP,1);
Op.set(UpADnB,DnBP,1);}
I'm testing my code now, and I see no problems so far, though I have yet to checked everything.
I do have one question still -- how is the anti-commutation handled between sites? I understand this requires the Jordan-Wigner strings, but that AutoMPO handles this automatically for fermions. What indicates to AutoMPO that a collection of operators defined for a Site Set is fermionic?
Thanks!