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:

\[\begin{align} H_{\text{diagonal-hopping}} &= \sum_{i} t_{ii} c_{i}^{*} c_{i} \\ H_{\text{offdiagonal-hopping}} &= \sum_{i \neq j} t_{ij} c_{i}^{*} c_{j} \end{align}\]

The hermiticity of the Hamiltonian requires that $t_{ii}$ be real, and $t_{ij} = t_{ji}^{*}$. Thus we can rewrite the offdiagonal term as

\[H_{\text{offdiagonal-hopping}} = \sum_{i \lt j} t_{ij} c_{i}^{*} c_{j} + t_{ij}^{*} c_{j}^{*} c_{i}\]

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}
end

i 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}
end

which represent

\[U c_{i}^{*} c_{j}^{*} c_{j} c_{i}, \qquad i \lt j\]

and

\[U c_{i}^{*} c_{j}^{*} c_{l} c_{k} + U^{*} c_{k}^{*} c_{l}^{*} c_{j} c_{i}, \qquad i \lt j \wedge k \lt l \wedge [ i \lt k \vee ( i = k \wedge j \lt l )]\]

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}
end

addhopping! and addinteraction!.