Ferromagnetic spin waves in the monolayer CrBr₃

Magnon bands and inelastic neutron spectra by linear spin wave theory

The following codes could compute the ferromagnetic spin wave dispersions of the monolayer CrBr₃ by the K-Γ model:

Note

K-Γ model is not the correct model to describe CrBr₃. See our paper. Here it is just for illustration on how to use this package.

using QuantumLattices
using TightBindingApproximation
using SpinWaveTheory
using Plots

lattice = Lattice((0.0, 0.0), (0.0, √3/3); vectors=[[1.0, 0.0], [0.5, √3/2]])
hilbert = Hilbert(site=>Spin{3//2}() for site=1:length(lattice))

J₁ = Heisenberg(:J₁, 0.0, 1)
J₂ = Heisenberg(:J₂, -0.178, 2)
J₃ = Heisenberg(:J₃, 0.051, 3)
K = Kitaev(:K, -4.288, 1; x=[30], y=[150], z=[270], unit=:degree)
G = Γ(:Γ, -0.044, 1; x=[30], y=[150], z=[270], unit=:degree)

magneticstructure = MagneticStructure(lattice, Dict(site=>[1, 1, 1] for site=1:length(lattice)))
CrBr₃ = Algorithm(:CrBr₃, LSWT(lattice, hilbert, (J₁, J₂, J₃, K, G), magneticstructure))
path = ReciprocalPath(reciprocals(lattice), (-2, -1)=>(2, 1), length=400)

spectra = CrBr₃(
    :INSS,
    InelasticNeutronScatteringSpectra(path, range(0.0, 15.0, length=301); fwhm=1.0, rescale=x->log(1+x))
    )
energybands = CrBr₃(:EB, EnergyBands(path))
plt = plot()
plot!(plt, spectra)
plot!(plt, energybands, color=:white, linestyle=:dash)
yticks!(plt, range(0.0, 15.0, length=16))
Example block output

Berry curvature and Chern number of the magnon bands

The Berry curvatures and the Chern numbers of the magnon bands could be computed in the reciprocal unitcell:

brillouin = BrillouinZone(reciprocals(lattice), 90)
berry = CrBr₃(:BerryCurvature, BerryCurvature(brillouin, [1, 2]));
plot(berry)
Example block output

Here, k₁ and k₂ denote the coordinates in the reciprocal space along the two reciprocal vectors.

The Berry curvatures can also be computed in a reciprocal zone beyond the reciprocal unitcell:

b₁, b₂ = 4*pi/√3*[1.0, 0.0], 4*pi/√3*[0.0, 1.0]
reciprocalzone = ReciprocalZone(
    [b₁, b₂], [-1.0=>1.0, -1.0=>1.0];
    length=301, ends=(true, true)
)
berry = CrBr₃(:BerryCurvatureEx, BerryCurvature(reciprocalzone, [1, 2]))
plot(berry)
Example block output