Download this example as Jupyter notebook or Julia script.
1. Multi-flavor spin wave simulations of FeI₂ (Showcase)
FeI₂ is an effective spin-1 material with strong single-ion anisotropy. Quadrupolar fluctuations give rise to a single-ion bound state that cannot be described by a dipole-only model. This tutorial illustrates how to use the linear spin wave theory of SU(3) coherent states (i.e. 2-flavor bosons) to model the magnetic behavior in FeI₂. The original study was performed in Bai et al., Nature Physics 17, 467–472 (2021).
The Fe atoms are arranged in stacked triangular layers. The effective spin Hamiltonian takes the form,
\[\mathcal{H}=\sum_{(i,j)} 𝐒_i ⋅ J_{ij} 𝐒_j - D\sum_i \left(S_i^z\right)^2,\]
where the set of exchange matrices $J_{ij}$ between bonded sites $(i,j)$ includes competing ferromagnetic and antiferromagnetic interactions. This model also includes a strong easy axis anisotropy, $D > 0$.
We will formulate this Hamiltonian in Sunny and then calculate its dynamic structure factor.
Get Julia and Sunny
Sunny is implemented in Julia. This is a relatively new programming language that allows for interactive development (like Python or Matlab) while also providing high numerical efficiency (like C++ or Fortran). New Julia users may wish to take a look at our Getting Started with Julia guide. Sunny requires Julia 1.9 or later.
From the Julia prompt, load Sunny
. For plotting, one can choose either GLMakie
(a pop-up window) or WGLMakie
(inline plots for a Jupyter notebook).
using Sunny, GLMakie
If these packages are not yet installed, Julia should offer to install them using its built-in package management system. If old versions are installed, you may need to update them to run this tutorial.
Crystals
A Crystal
describes the crystallographic unit cell and will usually be loaded from a .cif
file. Here, we instead build a crystal by listing all atoms and their types.
a = b = 4.05012 # Lattice constants for triangular lattice
+1. Multi-flavor spin wave simulations of FeI₂ (Showcase) · Sunny documentation Download this example as Jupyter notebook or Julia script.
1. Multi-flavor spin wave simulations of FeI₂ (Showcase)
FeI₂ is an effective spin-1 material with strong single-ion anisotropy. Quadrupolar fluctuations give rise to a single-ion bound state that cannot be described by a dipole-only model. This tutorial illustrates how to use the linear spin wave theory of SU(3) coherent states (i.e. 2-flavor bosons) to model the magnetic behavior in FeI₂. The original study was performed in Bai et al., Nature Physics 17, 467–472 (2021).
The Fe atoms are arranged in stacked triangular layers. The effective spin Hamiltonian takes the form,
\[\mathcal{H}=\sum_{(i,j)} 𝐒_i ⋅ J_{ij} 𝐒_j - D\sum_i \left(S_i^z\right)^2,\]
where the set of exchange matrices $J_{ij}$ between bonded sites $(i,j)$ includes competing ferromagnetic and antiferromagnetic interactions. This model also includes a strong easy axis anisotropy, $D > 0$.
We will formulate this Hamiltonian in Sunny and then calculate its dynamic structure factor.
Get Julia and Sunny
Sunny is implemented in Julia. This is a relatively new programming language that allows for interactive development (like Python or Matlab) while also providing high numerical efficiency (like C++ or Fortran). New Julia users may wish to take a look at our Getting Started with Julia guide. Sunny requires Julia 1.9 or later.
From the Julia prompt, load Sunny
. For plotting, one can choose either GLMakie
(a pop-up window) or WGLMakie
(inline plots for a Jupyter notebook).
using Sunny, GLMakie
If these packages are not yet installed, Julia should offer to install them using its built-in package management system. If old versions are installed, you may need to update them to run this tutorial.
Crystals
A Crystal
describes the crystallographic unit cell and will usually be loaded from a .cif
file. Here, we instead build a crystal by listing all atoms and their types.
a = b = 4.05012 # Lattice constants for triangular lattice
c = 6.75214 # Spacing in the z-direction
latvecs = lattice_vectors(a, b, c, 90, 90, 120) # A 3x3 matrix of lattice vectors that
@@ -100,7 +100,7 @@
0.0 J′2apm 0.0;
0.0 0.0 J′2azz], Bond(1,1,[1,2,1]))
The function set_onsite_coupling!
assigns a single-ion anisotropy. The argument can be constructed using spin_matrices
or stevens_matrices
. Here we use Julia's anonymous function syntax to assign an easy-axis anisotropy along the direction $\hat{z}$.
D = 2.165
set_onsite_coupling!(sys, S -> -D*S[3]^2, 1)
Calculating structure factor intensities
In the remainder of this tutorial, we will examine Sunny's tools for calculating the dynamical structure factor using a multi-boson generalization of linear spin wave theory (LSWT). This theory describes non-interacting quasi-particle excitations that hybridize dipolar and quadrupolar modes.
Finding the ground state
Begin with a random configuration and use minimize_energy!
to find a configuration of the SU(3) coherent states (i.e. spin dipoles and quadrupoles) that locally minimizes energy.
randomize_spins!(sys)
-minimize_energy!(sys)
50
A positive number above indicates that the procedure has converged to a local energy minimum. The configuration, however, may still have defects. This can be checked by visualizing the spins, colored according to their $z$-components.
plot_spins(sys; color=[s[3] for s in sys.dipoles])
A different understanding of the magnetic ordering can be obtained by moving to Fourier space. The 'instant' structure factor $𝒮(𝐪)$ is an experimental observable. To investigate $𝒮(𝐪)$ as true 3D data, Sunny provides instant_correlations
and related functions. Here, however, we will use print_wrapped_intensities
, which gives average intensities for the individual Bravais sublattices (in effect, all wavevectors are wrapped to the first Brillouin zone).
print_wrapped_intensities(sys)
Dominant wavevectors for spin sublattices:
+minimize_energy!(sys)
49
A positive number above indicates that the procedure has converged to a local energy minimum. The configuration, however, may still have defects. This can be checked by visualizing the spins, colored according to their $z$-components.
plot_spins(sys; color=[s[3] for s in sys.dipoles])
A different understanding of the magnetic ordering can be obtained by moving to Fourier space. The 'instant' structure factor $𝒮(𝐪)$ is an experimental observable. To investigate $𝒮(𝐪)$ as true 3D data, Sunny provides instant_correlations
and related functions. Here, however, we will use print_wrapped_intensities
, which gives average intensities for the individual Bravais sublattices (in effect, all wavevectors are wrapped to the first Brillouin zone).
print_wrapped_intensities(sys)
Dominant wavevectors for spin sublattices:
[-1/4, 1/4, 1/4] 37.33% weight
[1/4, -1/4, -1/4] 37.33%
@@ -156,4 +156,4 @@
fig = Figure()
ax = Axis(fig[1,1]; xlabel="Momentum (r.l.u.)", ylabel="Energy (meV)", xticks, xticklabelrotation=π/6)
heatmap!(ax, 1:size(is_averaged, 1), energies, is_averaged)
-fig
This result can be directly compared to experimental neutron scattering data from Bai et al.
(The publication figure accidentally used a non-standard coordinate system to label the wave vectors.)
To get this agreement, the use of SU(3) coherent states is essential. In other words, we needed a theory of multi-flavored bosons. The lower band has large quadrupolar character, and arises from the strong easy-axis anisotropy of FeI₂. By setting mode = :SUN
, the calculation captures this coupled dipole-quadrupole dynamics.
An interesting exercise is to repeat the same study, but using mode = :dipole
instead of :SUN
. That alternative choice would constrain the coherent state dynamics to the space of dipoles only.
The full dynamical spin structure factor (DSSF) can be retrieved as a $3×3$ matrix with the dssf
function, for a given path of $𝐪$-vectors.
disp, is = dssf(swt, path);
The first output disp
is identical to that obtained from dispersion
. The second output is
contains a list of $3×3$ matrix of intensities. For example, is[q,n][2,3]
yields the $(ŷ,ẑ)$ component of the structure factor intensity for nth
mode at the q
th wavevector in the path
.
What's next?
The multi-boson linear spin wave theory, applied above, can be understood as the quantization of a certain generalization of the Landau-Lifshitz spin dynamics. Rather than dipoles, this dynamics takes places on the space of SU(N) coherent states.
The full SU(N) coherent state dynamics, with appropriate quantum correction factors, can be useful to model finite temperature scattering data. In particular, it captures certain anharmonic effects due to thermal fluctuations. See our generalized spin dynamics tutorial.
The classical dynamics is also a good starting point to study non-equilibrium phenomena. Empirical noise and damping terms can be used to model coupling to a thermal bath. This yields a Langevin dynamics of SU(N) coherent states. Our dynamical SU(N) quench tutorial illustrates how a temperature quench can give rise to novel liquid phase of CP² skyrmions.
Settings
This document was generated with Documenter.jl version 1.1.2 on Wednesday 1 November 2023. Using Julia version 1.9.3.
+fig
This result can be directly compared to experimental neutron scattering data from Bai et al.
(The publication figure accidentally used a non-standard coordinate system to label the wave vectors.)
To get this agreement, the use of SU(3) coherent states is essential. In other words, we needed a theory of multi-flavored bosons. The lower band has large quadrupolar character, and arises from the strong easy-axis anisotropy of FeI₂. By setting mode = :SUN
, the calculation captures this coupled dipole-quadrupole dynamics.
An interesting exercise is to repeat the same study, but using mode = :dipole
instead of :SUN
. That alternative choice would constrain the coherent state dynamics to the space of dipoles only.
The full dynamical spin structure factor (DSSF) can be retrieved as a $3×3$ matrix with the dssf
function, for a given path of $𝐪$-vectors.
disp, is = dssf(swt, path);
The first output disp
is identical to that obtained from dispersion
. The second output is
contains a list of $3×3$ matrix of intensities. For example, is[q,n][2,3]
yields the $(ŷ,ẑ)$ component of the structure factor intensity for nth
mode at the q
th wavevector in the path
.
What's next?
The multi-boson linear spin wave theory, applied above, can be understood as the quantization of a certain generalization of the Landau-Lifshitz spin dynamics. Rather than dipoles, this dynamics takes places on the space of SU(N) coherent states.
The full SU(N) coherent state dynamics, with appropriate quantum correction factors, can be useful to model finite temperature scattering data. In particular, it captures certain anharmonic effects due to thermal fluctuations. See our generalized spin dynamics tutorial.
The classical dynamics is also a good starting point to study non-equilibrium phenomena. Empirical noise and damping terms can be used to model coupling to a thermal bath. This yields a Langevin dynamics of SU(N) coherent states. Our dynamical SU(N) quench tutorial illustrates how a temperature quench can give rise to novel liquid phase of CP² skyrmions.