Hamiltonian: Full Interacting Hamiltonian
Terms of Hamiltonian
HartreeFockBogoliubov.jl currently supports Hamiltonian with hopping and (quartic) interaction terms. The hopping terms can be grouped into "diagonal" terms and "offdiagonal" terms:
The hermiticity of the Hamiltonian requires that $t_{ii}$ be real, and $t_{ij} = t_{ji}^{*}$. Thus we can rewrite the offdiagonal term as
To incorporate this we define two structs: HoppingDiagonal and HoppingOffdiagonal:
struct HoppingDiagonal{R<:Real}
amplitude ::R
i ::Int
Ri ::Vector{Int}
end
struct HoppingOffdiagonal{C<:Number}
amplitude ::C
i ::Int
j ::Int
Ri ::Vector{Int}
Rj ::Vector{Int}
endi and j are integers representing the "index" of the orbital, and Ri and Rj represents which unitcell they are in. The "unitcell coordinates" Ri and Rj are necessary for the representation of the Hamiltonian in the momentum space. A single HoppingOffdiagonal represents both $t_{ij} c_{i}^{*} c_{j}$ and its hermitian conjugate.
Similarly for the interaction, two structs are defined:
struct InteractionDiagonal{R<:Real}
amplitude ::R
i ::Int
j ::Int
Ri ::Vector{Int}
Rj ::Vector{Int}
end
struct InteractionOffdiagonal{C<:Number}
amplitude ::C
i ::Int
j ::Int
k ::Int
l ::Int
Ri ::Vector{Int}
Rj ::Vector{Int}
Rk ::Vector{Int}
Rl ::Vector{Int}
endwhich represent
and
In other words, (i,j) and (k,l) each need to be in lexicographical order, as well as $(i,j) < (k,l)$.
The following unions are defined
const Hopping = Union{HoppingDiagonal, HoppingOffdiagonal}
const Interaction = Union{InteractionDiagonal, InteractionOffdiagonal}Functions Creating Terms
HartreeFockBogoliubov.jl provides functions that allows generation of hopping terms and interaction terms from the orbital names and their CarteCoord: hoppingbycarte and interactionbycarte.
FullHamiltonian
The full interacting Hamiltonian is represented by the FullHamiltonian class
mutable struct FullHamiltonian{O}
unitcell ::UnitCell{O}
hoppings ::Vector{Hopping}
interactions ::Vector{Interaction}
endaddhopping! and addinteraction!.