The Kitaev chain model
Here's a simple example of the Kitaev chain Hamiltonian:
julia> using TopologicalNumbers
julia> function H₀(k, p)
μ, Δ = p
t = 1
[
-μ-2t*cos(k) 2im*Δ*sin(k)
-2im*Δ*sin(k) μ+2t*cos(k)
]
endYou can also use our preset Hamiltonian function KitaevChain to define the same Hamiltonian matrix as follows:
julia> H₀(k, p) = KitaevChain(k, p)The band structure is computed as follows:
julia> H(k) = H₀(k, (-1.0, 0.5))
julia> showBand(H; value=false, disp=true)Next, we can calculate the winding numbers using BPProblem:
julia> prob = BPProblem(H);
julia> sol = solve(prob)The output is:
BPSolution{Vector{Int64}, Int64}([1, 1], 0)The first argument TopologicalNumber in the named tuple is a vector that stores the winding number for each band. The vector is arranged in order of bands, starting from the one with the lowest energy. The second argument Total stores the total of the winding numbers for each band (mod 2). Total is a quantity that should always return zero.
You can access these values as follows:
julia> sol.TopologicalNumber
2-element Vector{Int64}:
1
1
julia> sol.Total
0One-dimensional phase diagram is given by:
julia> H(k, p) = H₀(k, (p, 1.0));
julia> param = range(-3.0, 0, length=601);
julia> prob = BPProblem(H);
julia> sol = calcPhaseDiagram(prob, param; plot=true)
(param = -3.0:0.005:0.0, nums = [0 0; 0 0; … ; 1 1; 1 1])Also, two-dimensional phase diagram is given by:
julia> param1 = range(-3.0, 3.0, length=101);
julia> param2 = range(-1.0, 1.0, length=101);
julia> prob = BPProblem(H₀);
julia> calcPhaseDiagram(prob, param1, param2; plot=true)
(param1 = -3.0:0.06:3.0, param2 = -1.0:0.02:1.0, nums = [0 0 … 0 0; 0 0 … 0 0;;; 0 0 … 0 0; 0 0 … 0 0;;; 0 0 … 0 0; 0 0 … 0 0;;; … ;;; 0 0 … 0 0; 0 0 … 0 0;;; 0 0 … 0 0; 0 0 … 0 0;;; 0 0 … 0 0; 0 0 … 0 0])