Skip to content

Commit 691399d

Browse files
committed
add 1D visualization examples to non-Hermitian docs
- also fix some writing that referenced terms hopping the opposite way relative to what they actually did - extend non-Hermitian SSH example a bit
1 parent 4f747e8 commit 691399d

2 files changed

Lines changed: 45 additions & 13 deletions

File tree

docs/make.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ makedocs(;
2525
"Band symmetry" => "band-symmetry.md",
2626
"Berry curvature & Chern numbers" => "berry.md",
2727
"Symmetry breaking" => "symmetry-breaking.md",
28-
"Nonhermitian models" => "nonhermitian.md",
28+
"Non-Hermitian models" => "nonhermitian.md",
2929
"API" => "api.md",
3030
"Internal API" => "internal-api.md",
3131
"Theory" => "theory.md",

docs/src/nonhermitian.md

Lines changed: 44 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,13 @@ cbr = @composite brs[1] # single-site model
1515
tbm = tb_hamiltonian(cbr, [[1]], NONHERMITIAN) # nearest neighbor hoppings
1616
```
1717

18-
The model is very simple: two different hopping terms, corresponding to right- and left-directed hops.
18+
The model is very simple: two different hopping terms, corresponding to left- and right-directed hops. The spatial interpretation can be checked by explicitly visualizing the tight-binding terms:
19+
20+
```@example hatano-nelson
21+
using GLMakie
22+
plot(tbm)
23+
```
24+
1925
It is the absence of hermiticity that allows the hopping amplitudes to differ in the two directions, in clear contrast to the Hermitian case:
2026

2127
```@example hatano-nelson
@@ -27,14 +33,13 @@ However, when the two amplitudes are unequal, the Hatano--Nelson model features
2733
We can see this by visualizing the complex energy as we vary $k$ from -1/2 to 1/2:
2834

2935
```@example hatano-nelson
30-
ptbm = tbm([0.8, 1.2]) # a model with 0.8 hopping amplitude to right, 1.2 to the left
36+
ptbm = tbm([0.8, 1.2]) # left & right hopping amplitudes of 0.8 and 1.2, respectively
3137
32-
using GLMakie
33-
update_theme!(linewidth = 4)
38+
ks = range(-1/2, 1/2, 500) # 500 sampling points in k
39+
Es = spectrum(ptbm, ks) # 500×1 matrix
40+
Es = vec(Es) # convert to vector
3441
35-
ks = range(-1/2, 1/2, 500) # 500 sampling points
36-
Es = spectrum(ptbm, ks) # 500×1 matrix
37-
Es = vec(Es) # convert to vector
42+
update_theme!(linewidth = 4)
3843
lines(real(Es), imag(Es); axis = (; autolimitaspect = 1))
3944
```
4045

@@ -204,10 +209,39 @@ using Crystalline, SymmetricTightBinding # hide
204209
brs = calc_bandreps(2, Val(1))
205210
cbr = @composite brs[1] + brs[3]
206211
tbm = tb_hamiltonian(cbr, [[0], [2]], Val(NONHERMITIAN))
212+
tbm = tbm[5:8] # retain only inter-orbital (offdiagonal) terms for simplicity
213+
```
207214

208-
# retain only inter-orbital (offdiagonal) terms for simplicity
209-
tbm = tbm[5:8]
210-
ptbm = tbm([.5, 1, 1, .5]) # antisymmetric hopping pattern
215+
We can visualize the associated terms via Makie:
216+
217+
```@example nonhermitian-ssh
218+
using GLMakie # hide
219+
update_theme!(linewidth = 4) # hide
220+
plot(tbm)
221+
```
222+
223+
!!! note "Comparison of non-Hermitian and Hermitian SSH model terms"
224+
It is instructive to compare the hopping terms in our non-Hermitian SSH model with its Hermitian counterpart:
225+
226+
```@example nonhermitian-ssh
227+
tbm_H = tb_hamiltonian(cbr, [[0], [2]], Val(HERMITIAN))
228+
tbm_H = tbm_H[5:6] # retain only inter-orbital (offdiagonal) terms
229+
```
230+
231+
```@example nonhermitian-ssh
232+
plot(tbm_H)
233+
```
234+
235+
From which we see that the breaking of Hermiticity splits `tbm_H[1]` across `tbm[1]` and `tbm[3]`, while `tbm_H[2]` is split across `tbm[2]` and `tbm[4]`. In other words, Hermiticity is restored in `tbm` for models `tbm([t1, t2, t1, t2])`.
236+
237+
We might e.g., explore the band structure (and associated exceptional points) for a non-Hermitian configuration, where the nearest- and next-nearest neighbor have equal-amplitude Hermitian hoppings, but oppositely signed non-Hermitian hoppings:
238+
239+
```@example nonhermitian-ssh
240+
Δ₁ = -0.3 # nearest-neighbor non-Hermitian asymmetry
241+
Δ₂ = 0.3 # next-nearest-neighbor ━━━━━━━ ┃┃ ━━━━━━━
242+
t₁ = 1 # nearest-neighbor Hermitian amplitude
243+
t₂ = 1 # next-nearest neighbor ━━━━━ ┃┃ ━━━━━
244+
ptbm = tbm([t₁+Δ₁, t₂+Δ₂, t₁-Δ₁, t₂-Δ₂]) # asymmetric hopping pattern
211245
212246
# calculate spectrum
213247
ks = range(-1/2, 1/2, 500)
@@ -218,8 +252,6 @@ Es_re = sort(Es_re; dims=2) # necessary to explicitly sort for visualization, du
218252
Es_im = sort(Es_im; dims=2) # difficult of sorting floating-point rounded complex numbers
219253
220254
# plot spectrum
221-
using GLMakie # hide
222-
update_theme!(linewidth = 4) # hide
223255
f = Figure()
224256
ax = Axis(f[1,1])
225257
lines!(ks, Es_re[:,1]; color=:royalblue, label="Re " * rich("E", font=:italic) * subscript("−"))

0 commit comments

Comments
 (0)