Anyonic Fermion Model

\hat{H} = -J\sum_{j=1}^{N-1} [\hat{C}_{j,\uparrow}e^{\iota \theta\hat{n}_{j,\downarrow}} \hat{C}_{j+1,\uparrow} + \hat{C}_{j,\downarrow}e^{\iota \theta\hat{n}_{j,\uparrow}} \hat{C}_{j+1,\downarrow} + h.c.]

Dear ITensor team,

I have questions about the implementation of above Hamiltonian. This is an anyonic fermion Hamiltonian. I have few questions regarding this.

1.

 function ITensors.op(::OpName"exp_nupP", ::SiteType"Electron", s::Index)  # exp(i\*θ\*nup)

     nup_opP = op("Nup", s)

return exp(1im \* theta \* nup_opP)

end     



function ITensors.op(::OpName"Cdagup_Ndn", ::SiteType"Electron", s::Index)  # exp(i\*θ\*nup)

return op("Cdagup", s) \* op("Ndn", s)

end



function ITensors.op(::OpName"exp_nupM", ::SiteType"Electron", s::Index)  # exp(-i\*θ\*nup)

     nup_opM = op("Nup", s)

return exp(-1im \* theta \* nup_opM)

end



function ITensors.op(::OpName"exp_ndnP", ::SiteType"Electron", s::Index)  # exp(i\*θ\*ndn)

     ndn_opP = op("Ndn",s)

return exp(1im \* theta \* ndn_opP)

end



function ITensors.op(::OpName"exp_ndnM", ::SiteType"Electron", s::Index)  # exp(-i\*θ\*ndn)

     ndn_opM = op("Ndn",s)

return exp(-1im \* theta \* ndn_opM)

end 

       os = OpSum()

           

for j in 1:(N-1) 

\# Hopping !!

             os -= J,"Cdagup",j,"exp_ndnP",j,"Cup",j+1   # 

             os -= J,"Cdagup",j+1,"exp_ndnM",j,"Cup",j   # complex conjugate     

             os -= J,"Cdagdn",j,"exp_nupP",j,"Cdn",j+1   #

             os -= J,"Cdagdn",j+1,"exp_nupM",j,"Cdn",j

end

Is this way of writing the Hamiltonian is correct or should I first make a composite operator of "Cdagup’’ and ‘‘exp_ndnP’’ and then put it in the os.

  1. I am trying to find out the correlation matrix \langle C_{l,\uparrow}^{\dagger} C_{j,\downarrow} \rangle. The energy is converged nicely within few sweeps but the correlation matrix is not giving the correct result specially the imaginary part. Even if I increase the number of sweeps a lot it does not change much. The total electron density is okay but the upspin and downspin electron density shows wiggles even for 500 sweeps. I am working with 2 particles in 40 sites.

Any help or suggestion appreciated.

Thank you in advance.!!

Hi, it looks like the strategy you are using here is basically ok and correct. I can’t comment on if the code is fully correct without actually running it, but it looks ok as I read through it.

One change I would suggest making, though, is to work out the matrix elements of the operators like “exp_nupM” by hand, because this should not be hard (since the operators like “Nup” are diagonal). Then I would suggst returning an actual matrix from your op overloads, like is done in this file:

https://github.com/ITensor/ITensors.jl/blob/main/src/lib/SiteTypes/src/sitetypes/qubit.jl

The reason is because that way the operator will be totally precise.

Regarding the test of the model and the correlation matrix, could the oscillations just be boundary effects? One might expect that on any finite-size system, there could be oscillations due to the system having open boundaries. One test you could do would be to set theta to zero and then see if you recover the expected results for the corresponding free fermion model on the same size of system. I don’t know if the model has any other exactly-solvable limits but if it does that could help. You could also check against exact (full state) results on a very small system.