Hello there,
I was planning to compute greater and lesser Green’s functions for an tight binding model I was intereseted in. After some try and error, I noticed my implementation was lagging the Jordan Wigner string operators (JW) to respect the fermionic statistics. I did so in the following code
using ITensors, ItensorsMPW
function yield_proper_Cdag_(sites, j)
JW_dagup_j = ITensor[]
JW_up_j = ITensor[]
JW_dagdn_j = ITensor[]
JW_dn_j = ITensor[]
push!(JW_dagup_j, op(sites, "Cdagup", j)) #creation
push!(JW_dagdn_j, op(sites, "Cdagdn", j)) #creation
push!(JW_dn_j, op(sites, "F", j)) #additional JW for creation spin_dn
for k in 1:(j-1)
push!(JW_up_j, op(sites, "F", k))
push!(JW_dn_j, op(sites, "F", k))
push!(JW_dagup_j, op(sites, "F", j-k)) #reversed order due to ^dagger
push!(JW_dagdn_j, op(sites, "F", j-k)) #reversed order due to ^dagger
end
push!(JW_dn_j, op(sites, "F", j)) #additional JW for annihilation spin_dn
push!(JW_up_j, op(sites, "Cup", j))
push!(JW_dn_j, op(sites, "Cdn", j))
return JW_dagup_j, JW_dagdn_j, JW_up_j, JW_dn_j
end
However, I was told, that there are implementation procedures, which already engage at least the local parity behavior. This would otherwise be fixed by adding an JW-Operator on the actual site, where an “Cdn” is added (that corresbosnds to the two push! statements right before and after my Code example).
My question is therefore:
Does the ITensor implementation already fix the local behaviour, or am I supposed to add the additional ones?
Note:
I am not using the MPO method, since I have to apply a “C(dag)” operator to perform time evolution for my calculation of Greens functions. I am also open for better suggestions to implement this too :).